【问题标题】:Running sequential command line arguments from python and retrieving output从 python 运行顺序命令行参数并检索输出
【发布时间】:2020-12-15 22:57:01
【问题描述】:

我的头撞墙已经够久了,在这里认输了。 我正在尝试使用 Python(特别是 3.8.2)与具有丑陋命令行界面的工具进行交互。我有以下命令,它有效。但是,我一直在阅读,这似乎是一种已弃用的方法,他们建议现在使用subprocess.run。我一直在尝试转换我的代码并且遇到了很多麻烦,所以希望能找到一些帮助。下面的代码,以及解释。

os.system(rf'cmd /k "{ExecDrive}: & cd {ExecDirectory} & {command}"')

第一部分是将驱动器号和目录更改为存储程序可执行文件的位置。鉴于用户可以从任何位置运行它,我必须确保它们在正确的目录中,然后再运行下面 f 字符串中的命令(本质上是 targetApp.exe -Arg1 Val1 -Arg2 Val2 等)。

其次,我需要捕获输出,以便解析一些消息。如果我可以让第一部分工作,我想我可以自己解决那个部分,但如果你是 subprocess.run 专业人士,任何帮助将不胜感激!

【问题讨论】:

  • 你在说什么操作系统(我假设是 windows)?您能否提供更多关于可执行文件的输入和输出是什么以及与您希望输入和输出的可执行目录相关的背景?你的可执行路径是静态的吗?
  • 是的,窗户。输入只是一个参数的大字符串(参见上面的示例)。输出将只是应用程序写入控制台窗口的行;具体来说,该应用程序会写出我需要捕获和解析的几行代码,以查找特定的字符串。输入将直接在代码中,输出将在控制台窗口中(假设 stdout 可以工作)。

标签: python cmd subprocess


【解决方案1】:

我实际上能够使用cwd 命令来完成我所需要的。新代码如下。 subprocess.run(command, cwd=rf"{ExecDrive}:{ExecDirectory}", shell=True)

【讨论】:

    【解决方案2】:

    subprocess.check_output(args)
    

    用于捕获输出。

    参考:https://docs.python.org/3/library/subprocess.html#subprocess.check_output

    【讨论】:

      猜你喜欢
      • 2011-11-13
      • 1970-01-01
      • 2014-10-05
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多