У меня есть сценарий jython-сервера (называемый rajant_server.py), который взаимодействует с файлом Java-API для связи по специальным сетевым радиостанциям. У меня есть программа на Python, которая действует как клиент (и делает несколько других вещей). В настоящее время я должен сначала запустить сервер, открыв окно командной строки / терминала и набрав:
cd [path to directory containing rajant_server.py
jython rajant_server.py
Как только сервер успешно подключается, он ждет клиента, который я запускаю, запустив:
cd [path to directory containing python client program]
python main.py
Когда клиент подключается, сервер печатает информацию (в настоящее время для отладки) в своем окне команд / терминалов, а клиентская программа выводит отладочную информацию в своем окне команд / терминалов. Я хочу покончить со сложным процессом, вызвав jython из моей программы main.py с помощью модуля подпроцесса.
Проблема в два раза:
1 - мне нужно, чтобы программа rajant_server.py открывалась в собственном окне терминала / команды
2 - jython нужно запускать в каталоге, где хранится файл rajant_server.py, другими словами, ввод следующего в команду / окно терминала не работает (не спрашивайте меня, почему):
jython C:/code_dir/comm/server/rajant_server.py
но:
cd C:/code_dir/comm/server
jython rajant_server.py
работает.
Ладно ... Мне только что надо работать. Это кажется чем-то вроде взлома, поэтому я все равно хотел бы, чтобы идеи были лучше. Вот что я сейчас делаю:
serverfile = r'rajant_server_v2.py'
serverpath = os.path.join(os.path.realpath('.'),'Comm',serverfile)
serverpath = os.path.normpath(serverpath)
[path,file] = os.path.split(serverpath)
command = '/C jython '+file+'\n'
savedir = os.getcwd()
os.chdir(path)
rajantserver = subprocess.Popen(["cmd",command],\
creationflags = subprocess.CREATE_NEW_CONSOLE)
#Change Directory back
os.chdir(savedir)
#Start Client
rajant = rajant_comm.rajant_comm()
rajant.start()
Если у вас есть решение, которое будет работать как в Linux, так и в Windows, вы будете моим героем. По какой-то причине я не смог изменить спецификации stdin или stdout для подпроцесса, когда я добавил creationflags = subprocess.CREATE_NEW_CONSOLE.