Я запускаю примеры в pytorch-kaldi, инструментарии для распознавания речи в python.Проблема возникает в функции
def run_shell(cmd,log_file):
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True)
(output, err) = p.communicate()
p.wait()
with open(log_file, 'a+') as logfile:
logfile.write(output.decode("utf-8")+'\n')
logfile.write(err.decode("utf-8")+'\n')
return output
, с ошибкой можно найти источник команды при cmd='source ~/.bashrc'
(просто простой тест).
Код работает в PyCharm с удаленным интерпретатором на сервере Ubuntu.
Однако, когда я набираю тот же cmd непосредственно в терминале или запускаю файл python (вызов python xx.py
в терминале), он работает гладко.Я знаю, это потому, что разница между оболочкой входа в систему и оболочкой без регистрации, и я могу запустить команду, изменив cmd в абсолютный путь.Однако мне интересно, как вызвать оболочку входа в Python с subprocess.Popen
вместо изменения cmd?
Кстати, я также хочу знать, может ли subprocess
работать в режиме sudo
и как