在python中运行python脚本

时间:2015-10-30 12:58:45

标签: python bash

我知道这个问题已被多次询问,我读了多个试图解决这个问题的问题。但是,这些都没有实际发挥作用。

我有一个从https://github.com/endrebak/kg

下载的python脚本

我试图从python内部运行以下命令。当我直接从终端运行它但在我从python中运行它时抛出错误:

/usr/packages/kg-master/bin/kg --mergecol=0 --noheader --genes --definition --species=hsa <(echo 01200)

使用以下代码:

pathwayID = 01200

cmd="/usr/packages/kg-master/bin/kg --mergecol=0 --noheader --genes --definition --species=hsa <(echo {})".format(pathwayID)

tmp = os.popen(cmd).read()

但是,我收到以下错误:

sh: -c: line 0: syntax error near unexpected token `('

sh: -c: line 0: `/usr/packages/kg-master/bin/kg --mergecol=0 --noheader --genes --definition --species=hsa <(echo 05200)'

我尝试了多项建议,例如在调用脚本

之前添加python
cmd="python /usr/packages/kg-master/bin/kg --mergecol=0 --noheader --genes --definition --species=hsa <(echo {})".format(pathwayID)

另一个建议是使用:

subprocess.call(['/usr/packages/kg-master/bin/kg', "--mergecol=0","--noheader","--genes","--definition","--species=hsa <(echo '01200')"])

此解决方案最接近解决问题,因为实际脚本已执行。然而,似乎参数没有正确传递,我不知道为什么。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

要使用subprocess运行此命令,您需要使用了解process substitution语法的shell,例如bash/bin/shsubprocess使用的默认shell,并不支持它。

import subprocess

cmd = ("/usr/packages/kg-master/bin/kg --mergecol=0 --noheader --genes"
       "--definition --species=hsa <(echo {})".format(pathwayID))

process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
                           stderr=subprocess.PIPE, executable="/usr/bin/bash")
out, err = process.communicate()

或者,您可以将ID保存到临时文件并使用输入重定向(<)。

答案 1 :(得分:0)

试试这个:

import subprocess

cmd="/usr/packages/kg-master/bin/kg --mergecol=0 --noheader --genes --definition --species=hsa <(echo {})".format(pathwayID)

process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = process.communicate()

命令的输出流将通过管道传输到&#34; out&#34;并且错误流将通过管道输入&#34; err&#34;。