使用子进程执行时出错

时间:2016-08-29 11:58:24

标签: python bash shell

我试图通过Python代码执行shell命令,但我无法理解它失败的原因。

当打印命令并将其粘贴到shell以尝试执行它时,它可以完美地运行,这是一个奇怪的部分。

从Python我得到以下内容:

/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `/DATA/NGS/ngs_software/bioinfoSoftware/bwa_current/bwa mem ... --threads 4 -T /tmp/samTemp -'

我有什么遗失的吗?我的代码看起来像这样,其中' cmd'是命令的字符串。操作系统是带有bash shell的CentOS:

process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
out = process.stdout.readline()
out = out.decode("utf-8").strip('\n')

1 个答案:

答案 0 :(得分:0)

您的命令包含进程替换,但Popen使用/bin/sh运行其命令。但是,当以/bin/sh运行时,bash不允许进行替换。您可以使用bash选项明确请求使用executable运行该命令。

process = subprocess.Popen(cmd, shell=True, executable='/bin/bash', stdout=subprocess.PIPE)