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)

         ......

参考技术A 要调用wait来等待子进程的返回值 参考技术B 进程管道

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 个不同的输出处理程序,stdoutstderr。通常 stdout 用于打印正常输出,stderr 用于打印错误和警告。

您可以使用subprocess.Popen.communicate() 来读取stderrstdout

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命令的返回值?的主要内容,如果未能解决你的问题,请参考以下文章

易语言 取telnet返回值问题

c语言 退出整个程序或函数的命令是啥

iterm2 cmd +c无法退出 如何解决

C语言中如何实现按任意键退出

C 语言popen函数,实现shell和读取内容

如何在C语言中调用cmd命令?