Python脚本在双击时运行,但赢得';不要空转

Python脚本在双击时运行,但赢得';不要空转,python,subprocess,python-idle,Python,Subprocess,Python Idle,因此,我一直在尝试编写一个简短的脚本,自动打开Unity3D帮助页面(其中五个),以及Unity本身和TortoiseHG。由于webbrowser模块没有按照我想要的方式运行(在我的Win7机器上),我一直在使用subprocess.run 昨晚,我想我终于把它修好了,让它做了我想做的事情,结果如果Firefox还没有运行,它只打开了五个窗口而不是标签。我和webbrowser有同样的问题。打开,想想看 但这不是我来这里的原因。我在这里是因为当我用IDLE打开脚本试图解决这个问题时,我遇到了一

因此,我一直在尝试编写一个简短的脚本,自动打开Unity3D帮助页面(其中五个),以及Unity本身和TortoiseHG。由于webbrowser模块没有按照我想要的方式运行(在我的Win7机器上),我一直在使用subprocess.run

昨晚,我想我终于把它修好了,让它做了我想做的事情,结果如果Firefox还没有运行,它只打开了五个窗口而不是标签。我和webbrowser有同样的问题。打开,想想看

但这不是我来这里的原因。我在这里是因为当我用IDLE打开脚本试图解决这个问题时,我遇到了一个新的问题:如果我双击脚本,它会运行得很好,但是如果我用F5尝试通过IDLE运行它,我得到了一个新的问题

  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'
我打算尝试使用time.sleep方法来运行Firefox进程,这样它就不会为每个subprocess.run调用打开一个新窗口(如前所述,如果Firefox已经运行,它们将在选项卡中打开)。我在试图解决新问题时把它注释掉了

我已经尝试过的:寻找一个可能会混淆导入的.pyc文件。没有找到。确保我的方法或类都不是以Python模块命名的——如您所见,没有任何方法或类定义,除非Python有一个名为GameDevEnvironment.py的模块。。。我在这里和其他地方发现了很多问题,人们有着相反的问题,在空闲状态下运行,而不是双击等,但找不到任何明显相关的


我感谢你的时间和帮助

由于原始问题是由两部分组成的,这里有一个由两部分组成的答案(两部分都在评论中)

我无法从空闲状态运行脚本的原因是shell版本比我编写的代码旧。基本上,在Python3.2中,子流程类不存在。当我卸载Python32以确保只能在Python35中打开时,问题就解决了

导致此问题的另一个问题是subprocess.run()在尚未运行Firefox实例的情况下打开多个Firefox窗口。解决方案是在对subprocess.run()的第一次和第二次调用之间添加time.sleep()。对我来说,八秒钟是一个很好的时间,让进程开始运行并允许第一页部分加载,这使得第二页加载更快。由于我的机器是旧的,我最后在每个标签之间加了一个睡眠时间——它看起来平滑多了,但过程增加了20秒;不太优雅

如果你在这里寻找一种不使用硒的方法来获得结果,我的建议是:使用硒。我敢肯定,如果我只是下载并学习它,它会节省我的时间和挫折感

完成的代码(因为我的帐户是新的,所以必须断开链接):


我怀疑IDLE使用的python安装与双击不同。您可以添加
import sys
/
print(sys.version)
来确认吗?
subprocess.run
在python 3.5中是新的。正如建议的那样,检查您的python版本。这确实是问题所在。我觉得我应该知道:p谢谢,伙计们!请将您找到的解决方案作为正确答案发布。它可能会在不同的窗口中打开,因为当程序启动时,每个子进程都会检查是否有firefox窗口打开。由于没有,每个进程几乎同时打开一个新的firefox窗口。如果在第一个和第二个subprocess.run()调用之间有一个sleep(),您可能会得到预期的结果。
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')
import os
import subprocess
import time

os.startfile(r'C:\Program Files\Mozilla Thunderbird\thunderbird.exe')

subprocess.run(r'start firefox -new-tab unity3d[breaking link]/learn/tutorials', shell=True)

time.sleep(8)

subprocess.run(r'start firefox -new-tab answers.unity3d[breaking link]', shell=True)

time.sleep(3)

subprocess.run(r'start firefox -new-tab unity3d[breaking link]/learn/tutorials/topics/scripting', shell=True)

time.sleep(3)

subprocess.run(r'start firefox -new-tab docs.unity3d[breaking link]/Manual/index.html', shell=True)

time.sleep(3)

subprocess.run(r'start firefox -new-tab docs.unity3d.[breaking link]/ScriptReference/index.html', shell=True)

time.sleep(3)

os.startfile(r'C:\Program Files\TortoiseHg\thgw.exe')

os.startfile(r'C:\Program Files\Unity\Editor\Unity.exe')