Python subprocess.popen返回空字符串

时间:2015-07-20 08:31:37

标签: python subprocess

import subprocess
cd=['sudo','./interface','-a','</tmp/vol.js']
p = subprocess.Popen(cd, stdout = subprocess.PIPE,stderr=subprocess.PIPE, stdin=subprocess.PIPE)

上面的代码返回null但是当我运行相同的命令时,sudo ./interface -a </tmp/vol.js完全正常

2 个答案:

答案 0 :(得分:1)

您正在使用特定于shell的重定向语法</tmp/vol.js),但subprocess.Popen()并未在shell中运行您的命令。

您需要在shell中运行该命令(传入字符串,而不是列表,并设置shell=True),或者打开vol.js您自己并通过您打开的stdin管道将其写入流程:

import subprocess
command = ('sudo', './interface', '-a')
with open('/tmp/vol.js') as input_stream:
    p = subprocess.Popen(command, stdout=subprocess.PIPE, 
                         stderr=subprocess.PIPE, stdin=input_stream)
    stdout, stderr = p.communicate()

请注意,我在此处传入了打开的vol.js文件对象作为输入流。

答案 1 :(得分:1)

你能试试吗?

import subprocess
cd = ['sudo','./interface','-a','</tmp/vol.js']
cd_cmd = " ".join(cd)
o, e = subprocess.Popen(cd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()

输出存储在变量“o”中,stderr存储在“e”