#python #cygwin
Вопрос:
Я делаю простой графический интерфейс python, и при нажатии кнопки он выполнит простую команду:
os.system("C:/cygwin64/bin/bash.exe")
Когда я смотрю в консоль, она работает правильно, но мой парень зависает и не отвечает.
Если я выполняю команду the в консоли без python, она отлично работает, и я запускаю терминал cygwin.
Если вы знаете, что такое cygwin, есть ли лучший способ запустить его в том же терминале?
Ответ №1:
os.system
блокирует текущий поток, который вы можете использовать os.popen
для этого в другом потоке, а также дает вам несколько методов для отсоединения/чтения/записи и т. Д. Этого процесса. например,
import os
a = os.popen("python -c 'while True: print(1)'")
создаст новый процесс, который будет завершен, как только вы завершите свой сценарий.
вы можете сделать
for i in a:
print(i)
например, и он заблокирует поток, как os.system
это делает.
вы можете a.detach()
сделать это всякий раз, когда захотите завершить процесс.
Однако, os.system
import os
os.system("python -c 'while True: print(1)'")
он будет выводить 1s вечно, пока вы не завершите сценарий.
Ответ №2:
Вы можете использовать функцию Popen
в пакете subprocess
. У него есть множество возможных аргументов, которые позволяют передавать входные данные и/или выходные данные из программы, которую вы запускаете. Но если вы просто хотите выполнить bash.exe
, позволяя вашей оригинальной программе Python продолжать работать и в конечном итоге дождаться завершения bash.exe
, то:
import subprocess
# pass a list of command-line arguments:
p = subprocess.Popen(["C:/cygwin64/bin/bash.exe"])
... # continue executing
# wait for the subprocess (bash.exe) to end:
exit_code = p.wait()