【问题标题】:Python subprocess command to run echo and leave the window openPython 子进程命令运行 echo 并保持窗口打开
【发布时间】:2016-05-05 13:36:44
【问题描述】:

在 python 2.7 中,我正在尝试:

  1. 在不显示控制台窗口的情况下使用子进程命令 Ping IP 地址。
  2. 如果 ping subproccess 命令返回 0 以外的任何值,请提醒用户 ping 失败
  3. 通过子进程使用 echo 命令提醒用户

步骤 1 和 2 已完成。我在第 3 步遇到问题。如果有比我尝试做的更好的方法来做到这一点,我愿意接受建议。我只是想要一种快速简便的方法来向用户显示简短的警告。

第 3 步的最大问题是控制台窗口出现了,但很快又消失了。理想情况下,我想让窗口保持打开状态,直到收到一些用户反馈,但此时我也会暂停。

这是我所拥有的:

subprocess.call(['echo', 'One or more of the IPs failed to respond to their ping. Check Logs', ' & pause'])

我正在寻找的最终结果是用户在他们的 PC 上处理他们的日常事务,出现一个弹出窗口,告诉他们计划的 ping 尝试未到达其目的地,用户提供反馈以关闭弹出窗口。

【问题讨论】:

  • 不相关:您可以使用 GUI 窗口来显示警报,例如 tkMessageBox.showwarning() 而不是在新的 Windows 控制台中启动 echo 命令。
  • 我做了一些快速的研究,发现这是一个选项,但我认为只发送一个 echo 命令会既快速又简单,因为我已经学会了如何使用 subprocess 命令。但也许这并不容易!下次我需要窗户时,我得研究一下
  • 如果你不知道如何使用tkMessageBox.showwarning();只是问(作为一个单独的问题)。我会尝试 import tkMessageBox; tkMessageBox.showwarning('title', 'text') 并确保它不适合你。

标签: python windows command subprocess echo


【解决方案1】:

在windows环境中:

def cmdMessage(message):
    subprocess.call('cmd /K "echo ' + message + '"')

cmdMessage('One or more of the IPs failed to respond to their ping. Check Logs')

【讨论】:

  • 假设是 Windows 环境。
  • 确实如此:/ 我会将其添加到我的答案中
  • 这非常有效。我正在尝试使用 cmd /K 选项,但找不到有效的组合。不过,这是有道理的。谢谢!
【解决方案2】:
subprocess.call(['echo', 'One or more of the IPs failed to respond to their ping. Check Logs', ' & pause'])

& pause 部分不起作用,因为这是您的 shell(无论是 Bash、Tcsh 等)正在解释的东西。这实际上会发送“& pause”作为echo 命令的第二个参数。

出于好奇,您为什么不直接用 Python 打印您的反馈?

print "One or more of the IPs failed to respond to their ping. Check logs."

如果要暂停,可以使用time 模块中的time.sleep。如果你想等待使用输入,你可以用 raw_input 做到这一点:

print "One or more of the IPs failed to respond to their ping. Check logs. Hit enter to continue."
raw_input()

【讨论】:

  • 他想让它弹出一个窗口,这样用户就会注意到,所以打印不会有什么帮助
  • 我有一种感觉“& pause”刚刚被回显出来,这是错误的,但我看不到! :p Ni 是正确的。关键是如果一切正常,用户甚至不应该知道任何事情发生。我将安排它每天早上运行以检查一些 PC,但如果它们都在线,我并不真正关心结果。
  • 问题可能不在于单独的参数(在 Windows 上,无论如何都必须将它们重新组合成一个字符串),而只是 echo 是一个 shell 命令,而不是一个可执行文件这一事实.
  • 无论如何,我不知道为什么 Python 进程应该通过调用 shell 命令或其他可执行文件来输出。打印功能/语句显然是要走的路。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多