在python中执行bash代码

时间:2013-01-04 11:42:54

标签: python

我是python的新手,我有一个bash代码,它将文件的结果存储到这样的变量中:

variable=(`cat text`)

variable现在的内容为test。我在python中使用Popen调用类似的尝试:

 subprocess.Popen("variable=(`cat text`)")

但我得到这样的错误:

Traceback (most recent call last):
  File "./push-jenkins", line 5, in <module>
    subprocess.Popen("variable=(`cat text`)")
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

不知道我在哪里弄错了。

提前致谢。

2 个答案:

答案 0 :(得分:2)

您无法从Python访问bash变量。改为:

variable = subprocess.check_output(['cat', 'text'])

我假设这个命令只是一个例子,因为你可以很容易地从Python读取文件。

请注意,对check_output的调用会将命令作为参数的拆分列表接收,而不是作为单个字符串。如果你有一个字符串,并且不想手动拆分,你可以这样做:

variable = subprocess.check_output(['sh', '-c', command])

甚至更好:

variable = subprocess.check_output(command, shell=True)

让shell努力工作。

答案 1 :(得分:0)

如果你想在这里使用管道,你可以这样做:

import subprocess as subp

proc = subp.Popen(["python", "Test_Pipe.py"], stdout=subp.PIPE, stdin=subp.PIPE)

while True :
    data = proc.stdout.readline() #block / wait
    print data