【问题标题】:Use python to run a command line [duplicate]使用python运行命令行[重复]
【发布时间】:2014-07-18 10:58:27
【问题描述】:

我想运行一个位于 C 中的程序,该程序可以使用命令行运行,如下所示

tclsh oommf.tcl avf2odt -average space -axis z -onefile  <filename>.txt  -headers none -ipat *.omf

这是我唯一需要在命令行中输入的内容。

如何使用 python 运行它?

请与问题非常相关。我见过很多答案,例如:您可以使用“子流程”来实现它。但是,它们都没有真正解决问题。

【问题讨论】:

  • 请详细说明您的尝试。
  • subprocess 与问题非常相关。
  • 请详细说明这个问题和your previous question 的答案如何不能解决您的问题。看来你遗漏了很多细节。
  • 大家好,感谢您的建议(和一些批评者)为了说明我的问题,我希望实现的是仅使用 python 来运行命令,如上面的代码中所写,可以运行在命令行中。如果这还不够指定,我将列出所有过程: 1 打开命令行 2 键入我上面写的行 3 按 Enter 执行 这就是我现在想要在 Python 中实现的全部。我自己搜索了一个解决方案,如下 import os os.system("")
  • 我是编程新手,这就是为什么我需要详细解释“子进程”,尽管我知道它可以解决问题。我什至不知道“shell”是什么,你可以想象我可能无法用熟练的程序员的语气来描述这个问题。

标签: python command-line


【解决方案1】:

您可以使用subprocess 模块。

import subprocess
subprocess.call(["tclsh", "oommf.tcl", "avf2odt", "-average", "space", "-axis", "z", "-onefile",  "<filename>.txt", "-headers", "none", "-ipat", "*.omf"])

https://docs.python.org/2/library/subprocess.html#subprocess.call

【讨论】:

  • 这其实是不正确的;您将在列表中传递 单独的参数,而不是一个长字符串。
  • 你是对的;编辑它。
  • 更令人惊讶的是,您的答案之前被标记为已接受..
【解决方案2】:

这应该可以解决问题(将进程的打印输出作为字符串返回)

import subprocess
output = subprocess.check_output("tclsh oommf.tcl avf2odt -average space -axis z -onefile  <filename>.txt  -headers none -ipat *.omf", shell=True)

如果您想要子进程的返回码(例如检查成功时是否为 0),请使用

import subprocess
return_code = subprocess.call("tclsh oommf.tcl avf2odt -average space -axis z -onefile  <filename>.txt  -headers none -ipat *.omf", shell=True)

【讨论】:

  • 不要使用shell=True,将参数拆分为单独的字符串列表可以让您完全避免使用额外的shell进程。
猜你喜欢
  • 2021-09-18
  • 2021-04-03
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 2021-03-22
  • 2019-12-23
相关资源
最近更新 更多