Как использовать оболочку входа в систему с подпроцессом в Python? - PullRequest
0 голосов
/ 11 июня 2019

Я запускаю примеры в 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 и как

...