当前位置: 首页 > 面试题库 >

如何仅调用命令而不获取其输出

芮琛
2023-03-14
问题内容

在Python中,通过subprocess而不是打扰其输出来调用命令的最短和标准方法是什么。

我尝试了,subprocess.call但是似乎返回了输出。我对此并不感到烦恼,我只需要在不使输出混乱的情况下静默运行程序即可。

如果有帮助,我正在打电话pdflatex给我,我的意图只是打电话给我。


问题答案:

p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
# do something with out, err, or don’t bother altogether.

基本上,此方法会将所有cmd输出“传递”到stdout和stderr到由准备的内存中缓冲区subprocess。这些缓冲区的内容由您决定。您可以检查它们,也可以完全不去理会它们。但是,管道传递到这些缓冲区的副作用是它们不会被打印到终端的缓冲区中。

编辑 :这也可以使用便捷方法call。进行演示:

>>> subprocess.call('ping 127.0.0.1')

Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Ping statistics for 127.0.0.1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms
0
>>> subprocess.call('ping 127.0.0.1', stdout=subprocess.PIPE)
0

编辑2
:注意subprocess.call

注意:请勿将此功能与stdout = PIPE或stderr =
PIPE一起使用。由于在当前进程中未读取管道,因此子进程如果向管道生成足够的输出以填满OS管道缓冲区,则子进程可能会阻塞。



 类似资料:
  • 我对nohup命令有意见。 当我运行我的工作时,我有很多数据。输出nohup.out变得太大,我的进程会变慢。我如何运行这个命令而不得到nohup.out?

  • 我该如何做到这一点,特别是因为您似乎无法真正运行中的任何类型的groovy代码?

  • 问题内容: 我有以下代码: 试图从阅读器中读取内容已挂起。我该如何解决?我该如何寻找正在发生的事情? 问题答案: 在等待命令完成的同时,必须连续读取输出。否则,如果命令产生足够的输出以填充输出缓冲区,则该命令将挂起,等待缓冲区被消耗,这将永远不会发生。这样您就陷入僵局。 以下示例在监视命令状态的同时连续读取stdout和stderr。它基于官方的JSch 示例 (仅添加了stderr的阅读)。 如

  • 问题内容: 如何获取命令提示符的输出,这意味着我已经打开了这样的命令提示符。 我无法获得像这样的cmd输出 那么如何获得命令提示符输出? 问题答案: 这不是Java问题。基本上,您正在执行的是Java(Java Main Process A),然后从中启动另一个进程(Windows CMD B)。很好,您可以在Java(A)中获得此过程(B)的输入/输出流。但是,此过程(B)使用其自己的标准输入/

  • 您好,我目前正在尝试使用MongoDB在线服务为我的Discord机器人制作一个带有经济系统的机器人,但是我似乎无法让我的代码使用这两个工具!平衡或平衡!“工作”命令,因为它不断出现以下错误: 错误: 代码:

  • 问题内容: 我正在使用JSCH -SSH库在“ shell”通道中执行命令,但找不到找到两种方法的方法: 1)如何查找命令是否在远程unix box上完全执行? 2)如何在String中捕获命令输出,而不是在System.out控制台上打印它? 下面是我的代码片段,可以在system.out上显示shell命令输出 注意:我不想使用“ exec”通道,因为它为每个命令启动一个新进程,并且不记得已导