python-当shell = False时,子进程输出空字符串

时间:2018-10-26 08:32:13

标签: python shell subprocess

我正在尝试使用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时,这两个语法选项似乎都可以正常工作。

0 个答案:

没有答案