繁体   English   中英

命令行需要文件作为参数,如何从 Python 程序传递变量并写入?

[英]Command-Line requires file as a parameter, how to pass a variable from a Python program and write into?

说,我有命令行实用程序,其中输出文件是强制性参数:

process_data <output file>

我想要的是能够从 Python 代码运行这个 CMD 命令,而不是将结果存储到文件中,而是将其存储到 Python 变量中(有点重定向它):

variable = None  # currently empty 

os.system(f"process_data {variable}")

在实用程序运行时结束时,我希望将内容放入该变量中,该变量应该写入“输出文件”:

print("output: ", variable)
output: "Data is processed successfully, here is the content of processing: ..."

调用外部程序的一种更简洁的方法是使用 python subprocess模块。 你有两种主要的使用方式。

如果您只想调用程序并等待输出而不捕获它:

import subprocess

variable = None

subprocess.call(["process_data", variable])

输出将打印在标准输出中,但您不会在 python 变量中得到它。
但是,您也可以使用附加参数指定不向用户显示输出。

如果要将输出存储在变量中:

import subprocess

variable = None

out = subprocess.check_output(["process_data", variable])

编辑:在我的示例中,变量是process_data的参数,而不是存储输出的变量

解决方案在这里:

variable = None

response = subprocess.run(["process_data", "/dev/stdout"], capture_output=True)


variable = response.stdout

如果是文本输出,我建议添加“text=True”标志:

response = subprocess.run(["process_data", "/dev/stdout"], capture_output=True, text=True)

最好有一个“timeout=...”标志,以防你的 cmd 挂起:

response = subprocess.run(["process_data", "/dev/stdout"], capture_output=True, text=True, timeout=10)

不要忘记经常检查:

if response.returncode != 0:
          # do something :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM