如何从Python脚本调用可执行文件?

如何从Python脚本调用可执行文件?,python,linux,executable,system-calls,Python,Linux,Executable,System Calls,我需要从Python脚本执行此脚本 可能吗?脚本生成一些输出,其中一些文件正在写入。如何访问这些文件?我尝试过使用子进程调用函数,但没有成功 fx@fx-ubuntu:~/Documents/projects/foo$ bin/bar -c somefile.xml -d text.txt -r aString -f anotherString >output 应用程序“bar”还引用了一些库,除了输出之外,它还创建了文件“bar.xml”。如何访问这些文件?只需使用open() 谢谢,

我需要从Python脚本执行此脚本

可能吗?脚本生成一些输出,其中一些文件正在写入。如何访问这些文件?我尝试过使用子进程调用函数,但没有成功

fx@fx-ubuntu:~/Documents/projects/foo$ bin/bar -c somefile.xml -d text.txt -r aString -f anotherString >output
应用程序“bar”还引用了一些库,除了输出之外,它还创建了文件“bar.xml”。如何访问这些文件?只需使用open()

谢谢,

编辑:

Python运行时中的错误仅限于这一行

$ python foo.py
bin/bar: bin/bar: cannot execute binary file
最简单的方法是:

import os
cmd = 'bin/bar --option --otheroption'
os.system(cmd) # returns the exit status
您可以使用
open()
以常规方式访问文件


如果您需要执行更复杂的子流程管理,那么模块就是最佳选择

要执行外部程序,请执行以下操作:

import subprocess
args = ("bin/bar", "-c", "somefile.xml", "-d", "text.txt", "-r", "aString", "-f", "anotherString")
#Or just:
#args = "bin/bar -c somefile.xml -d text.txt -r aString -f anotherString".split()
popen = subprocess.Popen(args, stdout=subprocess.PIPE)
popen.wait()
output = popen.stdout.read()
print output

是的,假设您的
bin/bar
程序将一些其他分类文件写入磁盘,您可以使用
open(“path/to/output/file.txt”)
正常打开它们。注意,如果您不想,您不需要依赖子shell将输出重定向到磁盘上名为“output”的文件。我在这里演示如何直接将输出读取到python程序中,而不必在其间访问磁盘。

用于执行unix可执行文件。我在Mac OSX中执行了以下操作,它对我起到了作用:

import os
cmd = './darknet classifier predict data/baby.jpg'
so = os.popen(cmd).read()
print so

此处
打印,以便输出结果。

子流程是您需要使用的,您能否提供一个示例,以便我们更好地了解它为什么不起作用?“子流程调用”?那是什么?请发布你使用的代码和你实际遇到的错误。是的,他说的是标准“子流程”模块中的“调用”功能,这是更好的方法,尽管os.system根据他的需要可能已经足够了。Shi Kaleb,我编辑了这个问题。嗨,Peter,有一个错误:bin/bar:bin/bar:无法执行二进制文件,并且没有来自Python运行时的任何其他信息。原因是什么?是关于可执行文件的错误。我已经解决了,谢谢Peter。请注意,这与
subprocess.Popen(shell=True)
具有相同的安全警告。除了文字字符串外,不要将其用于任何其他内容。我想对文件夹中的每个文件执行
tesseract
,因此我要执行os.walk,然后在循环中执行程序。它是如何工作的?