在linux上运行python2.7中的二进制文件

在linux上运行python2.7中的二进制文件,python,subprocess,Python,Subprocess,我在用python运行外部程序时遇到问题,该程序使用Popen传递多个变量: #!/usr/bin/env python import sys import os import shlex, subprocess a = raw_input("Enter a number:") b = raw_input("Enter a file:") c = raw_input("Enter dir to search:") subprocess.Popen(['/bin/sh', "./catnum.

我在用python运行外部程序时遇到问题,该程序使用Popen传递多个变量:

#!/usr/bin/env python
import sys
import os
import shlex, subprocess

a = raw_input("Enter a number:")
b = raw_input("Enter a file:")
c = raw_input("Enter dir to search:")

subprocess.Popen(['/bin/sh', "./catnum.bin", "-m",  a, "--remove",  "-o results.txt", b, c])

您可以改用call:

from subprocess import call
call(["cactnum.bin", "-m",a, "--remove",  "-o results.txt", b, c])
然而根据J.F.塞巴斯蒂安的评论

真正的问题是
无效/不必要的/bin/sh调用b)“-o results.txt”
应写成
“-o”、“results.txt”
(2个参数),即正确的调用是:
子进程。如果catnum.bin是可执行的,则检查调用([“/catnum.bin”、“-m”、a、“--remove”、“-o”、“results.txt”、b、c])
只是
子进程.Popen().wait()
(您已经混合了
子进程
操作系统
模块--
Popen()
未被弃用)。真正的问题是a)无效/不必要的
/bin/sh
调用b)
“-o results.txt”
应该写成
“-o”、“results.txt”
(2个参数),即正确的调用是:
子进程。检查调用([“/catnum.bin”、“-m”、a、“-remove”、“-o”、“results.txt”、b、c])/code>如果
是可执行的