У меня есть скрипт python, который вызывает другой скрипт python из другого каталога. Для этого я использовал subprocess.Popen
:Вызов скрипта python с аргументами с использованием подпроцесса
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()
Эта часть работает хорошо, потому что лог-файл можно увидеть ошибки, которая происходит на вызываемом скрипте , Вот сценарий питона называется:
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 не передает аргументы этому скрипту. Я думаю, что я делаю что-то неправильно, у кого-то есть идея?
Почему вы используете 'subprocess' вообще? Почему бы просто не «импортировать» его и не вызвать соответствующую функциональность напрямую? – jonrsharpe
@jonrsharpe, потому что скрипт, вызываемый подпроцессом, будет отличаться каждый раз. Таким образом, зависимости nerver одинаковы. Более того, этот скрипт не находится в том же проекте python, что и тот, который использует подпроцесс. –
Вы можете импортировать по имени скрипта, это не проблема. И неясно, что вы подразумеваете под * «не в том же проекте python» *, если они оба установлены на одной машине, что не должно быть проблемой. – jonrsharpe