다른 파이썬 스크립트를 다른 디렉토리에서 호출하는 파이썬 스크립트가 있습니다.하위 프로세스를 사용하여 인수가있는 파이썬 스크립트 호출
import os
import subprocess
arg_list = [project, profile, reader, file, str(loop)]
f = open(project_path + '/log.txt','w')
proc = subprocess.Popen([sys.executable, python_script] + arg_list, stdin=subprocess.PIPE, stdout=f, stderr=f)
streamdata = proc.communicate()[0]
retCode = proc.returncode
f.close()
묵시적으로 변환이 부분 때문에 내가 호출 된 스크립트에서 발생하는 오류를 볼 수있는 로그 파일의 잘 작동하지 않을 경우 모든 인수는 문자열입니다 : 내가 subprocess.Popen
을 사용하는 것을해야 할 일 .
import time
import csv
import os
class loading(object):
def __init__(self, project=None, profile=None, reader=None, file=None, loop=None):
self.project=project
self.profile=profile
self.reader=reader
self.file=file
self.loop=loop
def csv_generation(self):
f=open(self.file,'a')
try:
writer=csv.writer(f)
if self.loop==True:
writer.writerow((self.project,self.profile,self.reader))
else:
raise('File already completed')
finally:
file.close()
def main():
p = loading(project, profile, reader, file, loop)
p.csv_generation()
if __name__ == "__main__":
main()
내가 subprocess.Popen을 시작할 때, 나는 'project' is not defined
말해 호출 된 스크립트에서 오류가 있습니다 : 여기라는 파이썬 스크립트입니다. Popen 메서드는 해당 스크립트에 인수를 전달하지 않습니다. 내가 뭔가 잘못하고있는 것 같아요, 누군가 생각이 있어요?
왜 '서브 프로세스'를 사용하고 있습니까? 왜 그냥 '가져 오기'하지 않고 적절한 기능을 직접 호출할까요? – jonrsharpe
@jonrsharpe 왜냐하면 하위 프로세스에 의해 호출되는 스크립트가 매번 달라지기 때문입니다. 따라서 종속성은 동일합니다. 게다가이 스크립트는 서브 프로세스를 사용하는 것과 같은 파이썬 프로젝트에 있지 않습니다. –
스크립트의 이름으로 가져올 수 있습니다. 문제는 없습니다. 그리고 문제가되어서는 안되는 동일한 기계에 둘 다 설치되어 있다면, "같은 파이썬 프로젝트가 아닌"*이 의미하는 것이 명확하지 않습니다. – jonrsharpe