Python 使用子进程执行时出错

Python 使用子进程执行时出错,python,bash,shell,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

我试图通过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')

您的命令包含进程替换,但
Popen
使用
/bin/sh
运行其命令。但是,当作为
/bin/sh
运行时,
bash
不允许进程替换。您可以使用
executable
选项显式请求命令与
bash
一起运行

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

命令是什么?
shell尝试直接执行它非常有效
idle hold your app,但是
谁在外面持有你的app?
@chepner给了我正确的答案,这是一个不起作用的替代。谢谢你的帮助!令人惊叹的!,那确实管用,我不知道。非常感谢您的帮助:)谢谢您的可执行选项。。。不知道它的存在。。。我在通过重定向时出错