使用python运行命令行[重复]

Posted

技术标签:

【中文标题】使用python运行命令行[重复]【英文标题】:Use python to run a command line [duplicate] 【发布时间】: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”是什么,你可以想象我可能无法用熟练的程序员的语气来描述这个问题。 【参考方案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进程。

以上是关于使用python运行命令行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将命令行参数传递给python脚本[重复]

从命令行运行节点包[重复]

用于包装嘈杂的python脚本并使用sed删除特定行的shell命令问题[重复]

Python不会在bash中运行,但会在cmd中运行[重复]

从脚本在命令行上运行 MySQL 查询 [重复]

在Java中运行命令行[重复]