我正在尝试使用subprocess
模块从其他目录运行脚本并收集输出。由于某种原因,我只能使用shell=True
语法而不是shell=False
语法获取输出,该语法返回一个空字符串。
首先,在命令行中运行:
python ~/example/path/run.py -r arg1 -g arg2
我在命令行中得到了输出124
。
在另一个Python脚本中,在完全不同的目录中,然后运行:
import subprocess as sp
sp.check_output('python /Users/user.name/example/path/run.py -r arg1 -g arg2',
shell = True)
哪个返回所需的输出124
。但是,我读过shell=True
时应避免,所以我尝试:
import subprocess as sp
sp.check_output(['python',
'run.py',
'-r arg1',
'-g arg2'],
cwd='/Users/user.name/example/path/')
不幸的是,它输出一个空字符串。我尝试了几种替代方法,全部输出一个空字符串:
import subprocess as sp
sp.check_output(['python',
'/Users/user.name/example/path/run.py',
'-r arg1',
'-g arg2'])
import subprocess as sp
sp.check_output(['python',
'run.py',
'-r arg1',
'-g arg2'],
cwd='/Users/user.name/example/path/',
stderr=sp.STDOUT)
import subprocess as sp
sp.check_output(['python',
'run.py',
'-r', 'arg1',
'-g', 'arg2'],
cwd='/Users/user.name/example/path/',
stderr=sp.STDOUT)
不提供可复制示例的道歉,因为该问题似乎专门针对此命令而发生。例如,当我尝试使用命令ls
时,这两个语法选项似乎都可以正常工作。