【问题标题】:Why script waits on a line until I terminate the running process manually?为什么脚本会一直等待,直到我手动终止正在运行的进程?
【发布时间】:2018-12-19 06:40:40
【问题描述】:

我正在尝试编写一个脚本来自动浏览 Tor 浏览器中的 URL,并在几秒钟后终止 Windows 上的进程。 实际上一切正常,python 在我的 URL.text 文件中随机选择一行并使用操作系统命令在 Tor 浏览器中打开它,然后我添加了一个 sleep.time 在终止进程之前稍等片刻,但是当我执行代码时它会等待在“os.system”上,直到我手动关闭浏览器。之后,剩下的代码就可以正常执行了。

这里有什么问题?没找到。

为什么 python 在我关闭浏览器之前等待os.system 行?为什么自动执行os.system命令后不执行sleep

import time
import subprocess
import os
import random

def random_line(afile):
    line = next(afile)
    for num, aline in enumerate(afile, 2):
      if random.randrange(num): continue
      line = aline
    return line
i = 1
while i == 1:
    with open("C:\\Users\\TPK\\PycharmProjects\\MyScripts\\venv\\urls.txt" , "r") as urlfile:
        rndurl = random_line(urlfile)
    tor = "\"C:\\Users\\TPK\\PycharmProjects\\MyScripts\\venv\\TorBrowser\\Start Tor Browser.lnk\" " + rndurl
    os.system(tor)
    time.sleep(5)
    print ("after sleep")
    os.system("taskkill /im firefox.exe")

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及重现它所需的最短代码在问题本身。没有清晰的问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example

标签: python python-3.x time os.system


【解决方案1】:

os.system 的工作方式是它不会产生在后台运行的新进程。相反,它等待命令完成运行,然后继续。在您的情况下,该过程在您关闭浏览器窗口时完成。我建议您使用subprocess.run,而不是使用os.system。它不是等待进程完成,而是生成它并让它在后台运行。请注意,您需要在每个空格处分隔命令并将其放入列表中。像这样:subprocess.run(["C:\path\to\Start Tor Browser.lnk", "https://url.to.open"])

【讨论】:

  • 它的作用与 os.system 相同
  • 对不起,应该是subprocess.Popen。使用与 subprocess.run() 相同的参数。
猜你喜欢
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
相关资源
最近更新 更多