2017-10-25 9 views
0

파이썬에서 창을 종료하는 간단한 타이머를 만들려고 시도하지만 (재미있는) 재미있는 작은 문제가 있습니다. 사용자가 초를 사용하여 종료하려면 몇 분 또는 초를 사용하려고합니다. 초를 사용하는 부분이 잘 작동하고, 문제가 몇 분이고, 스크립트가 몇 분 안에 시간을 얻고 초로 변환됩니다. subprocess.call ([ "shutdown ""-s ","-t ", ntime])파이썬에서 윈도우를 종료하는 간단한 타이머를 만들려고 시도합니다.

하지만 작동하지 않습니다. file.py를 두 번 클릭하면 스크립트가 닫힙니다.하지만 IDLE i에서 실행하면 이 오류 메시지 받기 :

Traceback (most recent call last): 
    File "C:\Users\User\Desktop\shutdown.py", line 17, in <module> 
    subprocess.call(["shutdown" "-s", "-t", ntime]) 
    File "F:\Programs\python\lib\subprocess.py", line 267, in call 
    with Popen(*popenargs, **kwargs) as p: 
    File "F:\Programs\python\lib\subprocess.py", line 709, in __init__ 
    restore_signals, start_new_session) 
    File "F:\Programs\python\lib\subprocess.py", line 997, in _execute_child 
    startupinfo) 
FileNotFoundError: [WinError 2] The system cannot find the file specified 
>>> 


Code: 
import subprocess 
print('0:Seconds') 
print('1:Minutes') 
minorsec = input('Want to use minutes or seconds? ') 
if minorsec == '0': 
    time = input('Type the time to shutdown in seconds: ') 
    subprocess.call(["shutdown", "-s", "-t", time]) 
elif minorsec == '1': 
    time = input('Type the time to shutdown in minutes: ') 
    ntime = int(time) * 60 
    subprocess.call(["c:\\windows\\system32\\shutdown.exe" "-s", "-t", str(ntime)]) 
else: 
    print('Error, Press just 0 or 1') 
input('Press Enter to close: ') 
+0

제공하기 바랍니다 문자열이어야 전자 코드 – yash

+0

질문에 코드를 추가했습니다 – Danilo

답변

0

문제 # 1 :이 줄

ntime = time * 60 

은 당신이하지 생각하지 않습니다. time 인 경우 이전 input 호출에서 반환 된 값은 정수가 아닌 문자열입니다. 따라서 사용자가 "15"를 입력하면 ntime은 "1515151515151515151515 ..... 15"와 같이 정신 나간 것입니다. # 1을 고정하는 부작용

ntime = int(time) * 60 

이슈 # 2 :

정수로 다시 문자열에서 사용자의 입력 변환 : 모든 값을 인수 목록에 subprocess.call에 그건 아마도 핵심 문제입니다

time = input('Type the time to shutdown in minutes: ') 
ntime = int(time) * 60 
subprocess.call(["shutdown" "-s", "-t", str(ntime)]) 

문제 # 3 : 인수 목록을 사용하지 마십시오

subprocess.call("shutdown.exe -s -t " + str(ntime)) 
+0

나는 이것과 거의 같은 오류가 발생했습니다 : 파일 "C : \ Users \ User \ Desktop \ shutdown.py"파일 1733 줄에서 하위 프로세스로 변경했습니다. To : "C : \ Users \ User \ Desktop \ shutdown.py"파일을 1733 줄에 subprocess.call ([ "c ("종료 ""- ""종료 " : \\ windows \\ system32 \\ shutdown.exe ""-s ","-t ", str (ntime)]) – Danilo

+0

그래, 나도 repro를 얻을 수 있었다 ... 조사 중 ... – selbie

+0

이것은 제가 말한 "issue # 1"은 여전히 ​​당신의 코드에서 합법적 인 버그입니다. – selbie