C语言程序如何读取cmd命令的返回值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言程序如何读取cmd命令的返回值?相关的知识,希望对你有一定的参考价值。
fp=popen(cmd,"r")
fgets(buffer, sizeof(buffer), fp);
strncmp(buffer, "success", strlen("success"))
---------------------------------------------------
pid = vfork();
if (pid == 0)
execl("/bin/sh", "sh", "-c", cmd, (char*)0)
else
while(waitpid(pid, &status, 0) < 0)
......
Python 执行 cmd 并存储它返回的任何内容
【中文标题】Python 执行 cmd 并存储它返回的任何内容【英文标题】:Python executing cmd and storing whatever it returns 【发布时间】:2020-03-29 05:11:53 【问题描述】:我正在编写一个在 Windows 上执行 CMD 命令的脚本。我用它来解析命令到不同的应用程序。这些命令返回一些值或错误。如何强制 Python/CMD 将返回的任何命令(无论是返回值还是错误)存储在变量中,并强制它不将其打印到控制台。我尝试了 subprocess 和 os.system() 并且我尝试过的所有这些都允许存储值,但是当命令返回错误时,它仍然被打印到控制台而不是存储在变量中。
【问题讨论】:
【参考方案1】:这是 cmd 的 shell / 的属性以及您如何调用该进程。默认情况下,有一个输入流(stdin)和两个输出流(stdout 和 stderr)——后者是所有错误的默认流。
您可以通过适当地调用脚本将其中一个或两个指向另一个或 stdin 或文件。见https://support.microsoft.com/en-us/help/110930/redirecting-error-messages-from-command-prompt-stderr-stdout
例如
myscript 1> output.msg 2>&1
会将所有内容(包括错误)定向到 output.msg。现在将输出重定向与写入变量结合起来;这在this answer 中有解释。
【讨论】:
【参考方案2】:在 shell 中执行命令时,有 2 个不同的输出处理程序,stdout 和 stderr。通常 stdout 用于打印正常输出,stderr 用于打印错误和警告。
您可以使用subprocess.Popen.communicate() 来读取stderr 和stdout。
import subprocess
p = subprocess.Popen(
"dir",
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True
)
(stdout, stderr) = p.communicate()
print(stdout.decode('utf-8')) # Standard output
print(stderr.decode('utf-8')) # Standard error
【讨论】:
这个解决方案有效,但是当我使用 os.system() Python 执行命令并继续下一行时。但是使用 subprocess.Popen() Python 会等待另一行,直到应用程序(我通过 CMD 启动)关闭。如何强制它“继续”? 我不明白您所说的“等待另一条线”是什么意思。该命令是否需要输入?如果是这样,您可以使用p.communicate(input="whatever you want to send")
将数据发送到命令标准输入。
从你写的代码,Python执行:'import subprocess cmd = subprocess.Popen("udt.exe", stdout=subprocess.PIPE, stderr=subprocess.PIPE) #它运行的应用是一个窗口应用程序”,然后暂停。什么都没发生。如果我手动关闭 udt.exe 应用程序,Python 代码将恢复并执行下一步以上是关于C语言程序如何读取cmd命令的返回值?的主要内容,如果未能解决你的问题,请参考以下文章