【发布时间】:2017-01-20 19:15:56
【问题描述】:
所以我一直在尝试编写一个简短的脚本来自动提取 Unity3D 帮助页面(其中五个),以及 Unity 本身和 TortoiseHG。由于 webbrowser 模块的行为不是我想要的(在我的 Win7 机器上),我一直在使用 subprocess.run。
昨晚,我以为我终于修好了这个东西,让它做我想做的事,但如果 Firefox 还没有运行,它只打开五个窗口而不是标签。我在使用 webbrowser.open 时遇到了同样的问题,请看图。
但这不是我来这里的原因。我在这里是因为当我使用 IDLE 打开脚本以尝试修复 that 问题时,我遇到了一个新问题:如果我双击它,脚本会运行得很好,但如果我尝试用 F5 通过 IDLE 运行它我得到 p>
Traceback (most recent call last):
File "C:\Users\<me>\AppData\Local\Programs\Python\Python35-32\GameDevEnvironment.py", line 5, in <module>
subprocess.run(r'start firefox -new-tab https://unity3d.com/learn/tutorials', shell=True)
AttributeError: 'module' object has no attribute 'run'
我的完整代码:
import os
import subprocess
#import time
subprocess.run(r'start firefox -new-tab https://unity3d.com/learn/tutorials', shell=True)
#time.sleep(5)
subprocess.run(r'start firefox -new-tab https://answers.unity3d.com', shell=True)
subprocess.run(r'start firefox -new-tab https://unity3d.com/learn/tutorials/topics/scripting', shell=True)
subprocess.run(r'start firefox -new-tab https://docs.unity3d.com/Manual/index.html', shell=True)
subprocess.run(r'start firefox -new-tab https://docs.unity3d.com/ScriptReference/index.html', shell=True)
#os.startfile(r'C:\Program Files\Unity\Editor\Unity.exe')
#os.startfile(r'C:\Program Files\TortoiseHg\thgw.exe')
我打算尝试使用 time.sleep 方法让 Firefox 进程运行,这样它就不会为每个 subprocess.run 调用打开一个新窗口(如前所述,如果 Firefox 是,它们将在选项卡中打开已经运行)。我在尝试解决新问题时将其注释掉。
我已经尝试过:寻找一个可能会混淆导入的 .pyc 文件。没有找到。确保我的方法或类都不是以 Python 模块命名的——如您所见,没有任何方法或类定义,除非 Python 有一个名为 GameDevEnvironment.py 的模块......我在这里发现了很多问题并且其他人在 IDLE 中运行的相反问题不是双击等,但找不到任何明显相关的东西......
感谢您的宝贵时间和帮助!
【问题讨论】:
-
我怀疑 IDLE 使用与双击不同的 python 安装。可以加
import sys/print(sys.version)确认吗? -
subprocess.run在 python 3.5 中是新的。按照建议,检查您的 python 版本。 -
这确实是问题所在。我觉得我应该知道 :p 谢谢,伙计们!
-
请将您找到的解决方案作为正确答案发布。
-
它很可能在不同的窗口中打开,因为当程序启动时,每个子进程都会检查是否有一个 firefox 窗口打开。由于没有,每个进程大致同时打开一个新的 Firefox 窗口。如果在第一个和第二个 subprocess.run() 调用之间有一个 sleep(),你可能会得到预期的结果。
标签: python subprocess python-idle