这是一个可以从命令行运行的简单命令:
> python -c "print('asdasd')"
asdasd
但是从脚本执行时无法输出任何内容:
import os
import sys
import subprocess
cmd = [sys.executable] + ['-c', '"print(\'asdasd\')"']
print cmd
kwargs = {
'stdout': subprocess.PIPE,
'stderr': subprocess.PIPE,
'stdin': subprocess.PIPE,
}
print subprocess.Popen(cmd).communicate()
print subprocess.Popen(cmd, **kwargs).communicate()
输出:
['C:\\Python27\\python.exe', '-c', '"print(\'asdasd\')"']
(None, None)
('', '')
为什么它不产生任何东西?我没主意了。对我来说,这像是 Python 2.7.11 中的一个错误。
最佳答案
首先,您不需要在命令行参数中为 '"print(\'asdasd\')"'
添加额外的双引号。事实上,您的代码将只执行执行以下操作的 Python 代码:"print(\'asdasd\')"
。换句话说,它将生成字符串:print(\'asdasd\')
显然,创建字符串不会打印任何内容。这是代码的修补版本:
import os
import sys
import subprocess
cmd = [sys.executable] + ['-c', 'print(\'asdasd\')']
print cmd
kwargs = {
'stdout': subprocess.PIPE,
'stderr': subprocess.PIPE,
'stdin': subprocess.PIPE,
}
print subprocess.Popen(cmd).communicate()
print subprocess.Popen(cmd, **kwargs).communicate()
您可能想使用shlex解析命令行参数的模块。
例如,使用 shlex 模块和字符串格式的三引号(不要忘记 python 路径的引号,否则将解释反斜杠等字符):
import sys
import shlex
import subprocess
cmd_str = '''"{}" -c "print('asdasd')"'''.format(sys.executable)
print(cmd_str)
cmd = shlex.split(cmd_str)
print(cmd)
kwargs = {
'stdout': subprocess.PIPE,
'stderr': subprocess.PIPE,
'stdin': subprocess.PIPE,
}
print(subprocess.Popen(cmd).communicate())
print(subprocess.Popen(cmd, **kwargs).communicate())
关于python - 使用子进程执行的子 Python 没有输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37919793/