2012-09-19 53 views
0

我希望在shell中以python作为字符串运行jobs命令的输出。Python中的子进程

我有这样的代码

import subprocess 
p1 = subprocess.Popen(['jobs'], shell=True, stdout=subprocess.PIPE) 
print p1.communicate() 

但这似乎没有工作。我得到的输出是 -

('', None) 

如何解决这个问题?

+2

你在哪个Python版本和操作系统上?它在Linux,Python 2.5.2上运行良好。 – csl

+1

'p1.returncode'的价值是什么? (顺便说一句,你不需要'shell = True'。) –

+1

我相信你正在测试不同的代码(所显示的print语句会输出一个字符串,而不是元组)。除了印刷说明外,可能还有其他不同之处,这会造成麻烦。所示的代码适用于我(Linux,Python 2.7.3)。 – atzz

回答

1

您可以使用subprocess.check_output

In [5]: import subprocess 

In [6]: output = subprocess.check_output("ps") 

In [7]: print output 
    PID TTY   TIME CMD 
2314 pts/2 00:00:06 bash 
4084 pts/2 00:00:03 mpdas 
7315 pts/2 00:00:02 python 
7399 pts/2 00:00:00 ps 


In [8]: 

您的代码工作正常,我。

In [11]: import subprocess 

In [12]: p1 = subprocess.Popen(['ps'], stdout=subprocess.PIPE) 

In [13]: print p1.communicate()[0] 
    PID TTY   TIME CMD 
2314 pts/2 00:00:06 bash 
4084 pts/2 00:00:03 mpdas 
7315 pts/2 00:00:02 python 
7682 pts/2 00:00:00 ps 


In [14]: