Я предполагаю, что вы используете свой скрипт Python, дважды щелкнув его в каком-то графическом интерфейсе, а не в командной строке (потому что открытие /bin/sh
из оболочки довольно бесполезно). Это заставляет вас не видеть NameError
: subprocess
не определен, потому что вы забыли его импортировать.
Фиксация, которая не решит вашу проблему.
Во-первых, поймите, что ваша программа на C лишней; вы можете сразу начать /bin/sh
через subprocess.Popen
. Но если вы делаете это, поскольку, как я предполагаю, запуск вашего скрипта из графического интерфейса, вы не будете в конечном итоге иметь новое окно терминала с запущенной в нем оболочкой; /bin/sh
собирается понять, что он не работает на TTY и немедленно выходит.
Вместо этого вы, вероятно, захотите открыть новый терминал , и пусть это запустит вашу оболочку. Как это сделать, зависит от того, что терминал, который вы обычно используете, но вот возможный способ сделать это, если вы используете Xterm (другие распространенные терминалы включают гном-терминал или Konsole):
#!/usr/bin/env python
import os
os.execv('/usr/bin/xterm', ['xterm'])
(Вы хотите использовать os.execv
, а не что-то от subprocess
или os.system
, потому что это делает новый терминал заменяет процесс Python вместо бесцельного запуска в качестве его дочернего элемента.)