在Python中运行Python脚本

3

我知道这个问题已经被问了很多次,我读了很多试图解决这个问题的问题。然而,这些都没有真正起作用。

我有一个Python脚本,我从以下网址下载:https://github.com/endrebak/kg

我正在尝试从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个回答

2
要使用subprocess运行此命令,您需要使用理解进程替换语法的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保存到临时文件中,并使用输入重定向(<)。


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()

该命令的输出流将被导入到“out”中,错误流将被导入到“err”中。


我不确定这是否是运行程序的可行方式,但你可以尝试一下:cmd = "echo '%d' | /usr/packages/kg-master/bin/kg --mergecol=0 --noheader --genes --definition --species=hsa" % pathwayID - David Brown
假设 pathwayID 是一个数字,否则使用 %s。 - David Brown
这个也不行,脚本没有识别参数。 - ifreak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接