【问题标题】:Getting output files from external program using python使用python从外部程序获取输出文件
【发布时间】:2015-02-13 13:49:11
【问题描述】:

我在 Ubuntu 12.04 操作系统中使用 Python 2.7.3。我有一个外部程序说'xyz',它的输入是一个文件,两个文件说'abc.dat'和'gef.dat'是它的输出。

当我使用os.systemsubprocess.check_outputos.popen 时,它们都没有在工作目录中打印输出文件。 我需要这些输出文件进行进一步计算。

另外,我必须不断调用“xyz”程序“n”次,并且每次都必须不断地从中获取输出“abc.dat”和“gef.dat”。请帮忙。 谢谢你

【问题讨论】:

  • “我需要这些输出文件进行进一步计算”是什么意思?你想做什么?
  • @Sandhyaa S:看看这篇文章是否有帮助stackoverflow.com/questions/7604621/…
  • @LutzHorn:我需要输出以便我可以使用另一个程序处理它们
  • @MudassirRazvi:将检查线程并让您知道。谢谢。
  • @MudassirRazvi:我浏览了链接,发现了这个 - >>> subprocess.check_output(["ls", "-l", "/dev/null"]) 'crw-rw -rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' 你能解释一下这是什么意思吗??

标签: python output


【解决方案1】:

由于我的声誉太低,我无法评论您的问题。

如果您使用os.systemsubprocess.check_outputos.popen,您将只获得xyz 程序的标准输出(如果它在屏幕上打印某些内容)。要查看某个目录中的文件,可以使用os.listdir()。然后你可以在你的脚本中使用这些文件。也可能值得使用subprocess.check_call。 可能还有其他更好、更有效的解决方案。

【讨论】:

  • 好的。 os.listdir() 对我来说是新事物。会试一试。谢谢
【解决方案2】:

首先,直接运行你在python脚本中调用的程序,看看它是否会生成这两个文件。

假设确实如此,问题出在您的 python 脚本中。尝试使用subprocess.Popen,然后调用communicate()

这是一个例子:

from subprocess import Popen

p = Popen(["xyz",])
p.communicate()

communicate 等待进程终止。在p.communicate()之后执行代码应该可以得到输出文件。

【讨论】:

  • 如果我从终端运行程序 xyz 并给出输出,它就会运行。但是,当我尝试使用 python 脚本执行它时,程序运行但不会将输出文件打印到工作目录。问题一定出在我的脚本上。我曾经这样使用过 - import subprocess subprocess.check_output('/path/to/program/xyz abc.dat') 其中'abc.dat'是我的输入。我将使用 p.communicate()。非常感谢。
  • @SandhyaaS 是的,尝试使用Popen,如果不起作用,让我们看看会发生什么。
【解决方案3】:

感谢您回答我的问题,但我的问题的答案是这样的 -

导入子流程 subprocess.call("/path/to/software/xyz abc.dat", shell=True)

这给了我想要的输出。

我尝试了与子进程相关的命令,但它们返回错误“没有这样的文件或目录”。 'shell=True' 就像一个魅力。

再次感谢大家抽出宝贵时间回答我的问题。

【讨论】:

    猜你喜欢
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多