Я работаю над терминалом, который может вызывать другие программы, как и любой другой терминал.Я использую для этого подпроцесс в Windows.Я сталкиваюсь с 2 проблемами.
Первый: В настоящее время я использую OSError для всех ошибок, возникающих при использовании subprocess.Popen.
Код для этогоздесь:
try:
subprocess.Popen([command])
except OSError:
print("'" + command[0] + "' is not recognised as a command, program or bterm file.")
Когда я набираю python
, он правильно открывает командную строку python.Когда я набираю asdfa
, он возвращает ошибку.Проблема в том, что когда я набираю python non-existent-file.py
, я получаю ту же ошибку, когда проблема связана с дочерним аргументом.
Я хочу, чтобы терминал возвращал (null): can't open file 'test': [Errno 2] No such file or directory
, как при вызове из cmd или bash.
Как я могу различить эти 2 ошибки, сохраняя свое пользовательское сообщение об ошибке, когда файл не существует?
Секунда: Всякий раз, когда я передаю несколькослово args в subprocess.Popen
или subprocess.call
Я автоматически получаю эту ошибку, которую я не получаю, используя os.system()
Я не хочу использовать os.system
, потому что не могу вызвать пользовательские ошибкис ним.
Что я делаю не так?