我希望能够做类似于这里第二个答案的事情(但不完全相同):在Linux中工作时模拟Python中的Ctrl-C键盘中断。这种方法更简单,我认为我只是缺少了一些东西。比如说,从一个Python脚本中,我想要调用“ping”,并在第10次后终止它。我正试图像上面链接中所示的那样去实现它。
我希望当“完成百分比”显示为100.0时,自动终止它。
编辑:我正在CentOS上运行Python 2.6。
p = subprocess.Popen(['ping', 'google.com'], stdout=subprocess.PIPE)
for line in p.stdout:
print line
if re.search('10', line):
break
os.kill(p.pid, signal.SIGINT)
但它不起作用。
我还希望正常的 'ping' 输出能够显示。我该怎么做?
编辑:实际上我想做的不是 'ping'。 我只是用它作为具有连续输出的命令的示例,而这些命令最终需要终止。
更具体地说,我正在运行旧版本的BitTorrent(来自此处第3个答案的v5.0.9:Where to find BitTorrent source code?),并通过python脚本调用它。 bittorrent-console.py是一个简单的终端版本,因此称之为“console”。 它会定期输出多行,类似于:
saving: filename
file size: blah
percent done: 100.0
blah: blahblah
我实际上是通过以下方式调用它:
subprocess.call(['./bittorrent-console.py', 'something.torrent'])
我希望当“完成百分比”显示为100.0时,自动终止它。
编辑:我正在CentOS上运行Python 2.6。
10
可能是IP地址的一部分。 - Ron Kleinsubprocess.Popen
和subprocess.call
在一个非常重要的细节上有所不同。前者是异步的,而后者是同步的。在后一种情况下,当您调用os.kill()
时,应用程序已经死亡,os.kill()
根本没有任何效果。 - Robᵩcall
,因为像下面的答案一样输出没有延迟。它只是调用了 bittorrent-console 并让它保持运行状态。我不知道如何在下载完成后终止它,除非通过键盘中断。 - joalT