2017-01-20 5 views
0

그래서 Unity3D 도움말 페이지 (5 개)와 Unity 자체 및 TortoiseHG를 자동으로 실행하는 간단한 스크립트를 작성하려고했습니다 . Webbrowser 모듈이 (Win7 박스에서) 원하는대로 작동하지 않았기 때문에 subprocess.run을 사용했습니다.더블 클릭하면 Python 스크립트가 실행되지만 IDLE은 실행되지 않습니다

어젯밤, 나는 Firefox를 이미 실행하고 있지 않으면 탭 대신 다섯 개의 창을 열어 놓고 마침내 문제를 해결하고 원하는대로 처리했다고 생각했습니다. 웹 브라우저에서 동일한 문제가 발생했습니다.

하지만 그것이 내가 여기있는 이유는 아닙니다. 나는 IDLE 스크립트를 열어 을 수정하려고 시도했기 때문에 문제가 생겼다. 새로운 문제가 생겼다. 두 번 클릭하면 스크립트가 제대로 실행되지만, IDLE을 통해 실행하려고하면 스크립트가 제대로 실행되기 때문이다. F5와 내가 얻을

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 방법을 사용하여 시도하려고 했어요 각 subprocess.run 호출 (앞서 말한 것처럼, Firefox가 이미 실행중인 경우 탭에서 열립니다). 나는 새로운 문제를 풀려고 노력하면서 그것을 주석 처리했다.

이미 시도한 바 있습니다. 가져 오기를 혼란스럽게 할 수있는 .pyc 파일을 찾고 있습니다. 아무것도 찾지 못했습니다. 당신이 볼 수 있듯이, 내 메소드 나 클래스 중 어느 것도 파이썬 모듈 이름을 따르지 않는다는 것을 확인하십시오. 파이썬에 GameDevEnvironment.py라는 모듈이 없다면, 메소드 나 클래스 정의가 없습니다. 여기에 많은 질문이 있습니다. 다른 곳에서는 IDLE을 두 번 클릭하지 않고 실행하는 것과 반대되는 문제가 있지만 분명히 관련이있는 항목을 찾을 수 없습니다 ...

시간과 도움에 감사드립니다!

+3

내가 IDLE을 더블 클릭은보다 다른 파이썬 설치를 사용하는 의심. 확인을 위해'import sys' /'print (sys.version)'을 추가 할 수 있습니까? –

+3

'subprocess.run'은 파이썬 3.5에서 새로 추가되었습니다. 제안 된대로 Python 버전을 확인하십시오. – tdelaney

+0

그건 사실 문제였습니다. 나는 내가 알아야했던 것처럼 느낀다 : p 고마워, 얘들 아! – pyansharp

답변

0

원래 질문은 두 개의 부분으로되어 있기 때문에 두 부분으로 된 대답이 있습니다 (둘 다 주석에 있습니다).

IDLE에서 스크립트를 실행할 수없는 이유는 쉘 버전이 내가 작성한 코드보다 오래되었다는 것입니다. 기본적으로 Python 3.2에서는 Subprocess 클래스가 존재하지 않았습니다. 이 Python35에서만 열리도록 Python32를 제거 할 때 문제가 해결되었습니다.

이 문제를 일으키는 다른 문제는 이미 실행중인 Firefox 인스턴스가없는 경우 subprocess.run()이 여러 Firefox 창을 여는 것입니다. 해결책은 subprocess.run()에 대한 첫 번째 호출과 두 번째 호출 사이에 time.sleep()을 추가하는 것이 었습니다. 나에게 8 초가 걸리면 프로세스가 진행되어 첫 페이지가 부분적으로로드되어 두 번째 페이지가 더 빨리로드됩니다. 내 컴퓨터가 오래되었으므로 각 탭 사이에 잠을 자지 못하게되었습니다. 훨씬 부드럽게 보이지만 20 초가 걸립니다. 매우 우아하지 않습니다.

셀렌을 얻지 않고 결과를 얻으려는 여기에 도착한 경우, 제 조언 : 셀레늄을 받으십시오. 나는 그것이 방금 다운로드하고 그것을 배웠을 때 그것이 나에게 시간을 절약하고 좌절감을 줄 것이라고 확신했다.

완성 된 코드는 (내 계정이 새로운 있기 때문에 링크를 중단했다) :

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')