Python中使用subprocess.run调用GNU Parallel失败如何解决?
问题原因
- 第一种写法错误原因:
subprocess.run传入列表参数时,每个命令行参数必须单独作为列表的独立元素。你将echo ::: A B C整体作为第二个列表元素,GNU Parallel会将整个字符串识别为要执行的单条命令,无法识别到后续的:::参数,因此触发输入缺失的警告。 - 第二种写法错误原因:
subprocess.run默认不启用shell解析,传入单元素列表时会将整个字符串当做可执行文件的路径查找,系统不存在名为/usr/bin/parallel echo ::: A B C的可执行文件,因此抛出FileNotFoundError。
解决方案
方案1(推荐):拆分所有参数为列表
无需启用shell解析,无命令注入风险,写法如下:
import subprocess cp = subprocess.run(["/usr/bin/parallel", "echo", ":::", "A", "B", "C"])
方案2:启用shell解析
如果你不想手动拆分参数,可以添加shell=True参数,此时直接传入完整命令字符串即可:
import subprocess cp = subprocess.run("/usr/bin/parallel echo ::: A B C", shell=True)
注意:shell=True存在命令注入风险,若命令中包含不可信的用户输入内容,禁止使用该方案。
内容的提问来源于stack exchange,提问作者JohnJ
相关产品推荐
相关产品推荐

