2014-05-14 2 views
1

다른 Python 스크립트를 실행하기 위해 작성하고있는 Python 스크립트가 있습니다. 목표는 밤새 내 다른 스크립트를 실행하기 위해 항상 실행하는 스크립트를 가질 수있게하는 것입니다. (배치 파일을 사용하여이 파일을 시도했지만 파일을 실행했지만 어떤 이유로 든 .csv 파일을 만들지 못했습니다.) 이제는 지금 가지고있는 코드가 있습니다.다른 Python 스크립트를 실행하는 Python 스크립트

import time 
import subprocess 
from threading import Timer 

fileRan = False 

#Function to launch other python files 
def runFiles(): 

    print('Running Scripts Now') 

    subprocess.call("cmd","report1.py",shell=True) 
    subprocess.call("cmd","report2.py",shell=True) 
    subprocess.call("cmd","report3.py",shell=True) 
    subprocess.call("cmd","report4.py",shell=True) 
    subprocess.call("cmd","report5.py",shell=True) 
    subprocess.call("cmd","report6.py",shell=True) 

#Function to check current system time against time reports should run 
def checkTime(fileRan): 
    startTime = '15:20' 
    endTime = '15:25' 

    print('Current Time Is: ', time.strftime('%H:%M', time.localtime())) 

    print(fileRan) 

    if startTime < time.strftime('%H:%M', time.localtime()) < endTime and fileRan is False: 
     runFiles() 
     fileRan = True 

     return fileRan 

#Timer itself 
t = Timer(60.0, checkTime(fileRan)) 
t.start() 

첫 번째 단계는 현재 시간을 인쇄하고 fileRan의 상태는 정상적으로 인쇄됩니다. 두 번째 검사를 할 때 또는 파일을 실행하려고 시도 할 때 파손 된 것처럼 보입니다. 내가 얻는 오류는 다음과 같습니다.

Exception in thread Thread-1: 
Traceback (most recent call last): 
    File "C:\Python34\lib\threading.py", line 921, in _bootstrap_inner 
    self.run() 
    File "C:\Python34\lib\threading.py", line 1187, in run 
    self.function(*self.args, **self.kwargs) 
TypeError: 'NoneType' object is not callable 

도움이된다면 도움이 될 것입니다.

+0

처음에는't = Timer (60.0, checkTime (fileRan))'을't = Timer (60.0, checkTime, fileRan)'으로 변경하십시오 (타이머는 함수 자체를 호출해야하므로, 함수를 호출 한 다음 결과를 전달) –

+0

제안 된대로 변경했습니다. 't = Timer (60.0, checkTime, fileRan)'이제이 오류가 발생합니다. 'TypeError : * 이후의 checkTime() 인수는 * bool이 아닌 시퀀스 여야합니다. ' – user1971240

+0

't = Timer (60.0, checkTime, [fileRan])'을 시도하고 내 대답도 편집하십시오. –

답변

2

이것은 사용자의 문제에 대한 대답이 아니라 코딩 제안입니다. 다른 Python 스크립트에서 Python 스크립트를 호출하는 것은 마지막 방법이라고 생각해야합니다.

Answer to similar question

파이썬 파일에서 파이썬 파일을 호출하기위한 바람직한 방법은 도서관 및 호출 명령 줄 모두로 사용할 수하기 위해 'reportsN.py'파일을 디자인하는 것입니다. Python은 이것을 통해

if __name__ == "__main__": 

관용구를 지원합니다.

ReportN.py는 다음과 같이 기록 될 것입니다 :

def stuff_to_do(): 
    pass 

if __name__ == "__main__": 
    stuff_to_do() 

귀하의 상단 스크립트, 'run_files.py은'() 함수/메소드를 라이브러리로 각각 'reportN.py'파일을 가져 와서 자신의 stuff_to_do를 할당 처리 할 것 필요에 따라 스레드에 연결합니다.

이 접근법은 항상 가능하지는 않습니다 (예 : 'reportN.py'가 귀하의 통제하에 있지 않은 경우). 그러나이 접근법은 귀하가 경합해야 할 항목 목록에서 '하위 프로세스'를 제거함으로써 문제를 단순화합니다 .

1

귀하의 subprocess.call()가 올바르지 않습니다, 여기에 적절한 구문을 참조하십시오 https://docs.python.org/2/library/subprocess.html 같은 cron 같은 당신을 위해이 작업을 수행하는 다른 도구도있다

subprocess.call(["python", "report1.py"], shell=True) 

.

+0

왜 downvote? –

+0

"python"과 "report1.py"사이에 공백이 있어야합니다. –

+0

@ ZeeshanMahmood, 아니요. 공백이 없어야합니다. subprocess.call은 명령과 인수 또는 모두 함께 한 문자열을 사용합니다. 목록을 전달하면 자동으로 공백을 추가하는 작업을 수행합니다. 내 대답에 링크 된 문서를 읽으십시오. –

관련 문제