Как выполнить системный вызов в python, используя PyCharm на Debian Linux? - PullRequest
0 голосов
/ 24 сентября 2018

Я не могу выполнить системный вызов с помощью PyCharm и не могу понять, какие переменные или параметры среды нужно изменить.

Учитывая этот простой скрипт:

import os
cmd = 'ifconfig -a'
os.system(cmd)

..., который отлично работает в командной строке в терминале, выдает следующую ошибку:

sh: ifconfig: command not found

Это происходит на самом деле с любым процессом, который я пытаюсь запустить, таким как CSVSQL, PSQL и т. д.

Я пытался: Отображая пути моего интерпретатора Python, отображаемые в командной строке, я пытался добавить их к путям интерпретатора PyCharm, но безрезультатно.

Существует несколько других потоков.описываю подобные проблемы, но, похоже, нет хорошего решения, с которым я столкнулся.

Я использую Linux Mint 19, хотя это работает в моей установке Windows (вывод PATH сильно отличается).

Приношу свои извинения, если это действительно просто ... Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Похоже, что pycharm не получает PATH из вашего профиля или rc.Попробуйте указать абсолютный путь к команде.

import os cmd = '/sbin/ifconfig -a' os.system(cmd)

Вы также можете проверить свой путь, используя следующую команду.

print(os.environ['PATH'])

И используйтеследующий, чтобы добавить свой собственный путь к текущему пути env.

os.environ['PATH'] += ':/sbin'

0 голосов
/ 24 сентября 2018

Запустите printenv на Python и терминале и проверьте переменную PATH.Используйте os.environ['PATH'] = 'My path', чтобы установить то, что вы видели на терминале.

Для будущих проблем (с которыми я столкнулся):

Быстрый способ проверить, является ли это экспортируемой переменной средыэто запустить os.system("/bin/sh -c \"MYCMD\""), а затем запустить ту же строку "/bin/sh -c \"MYCMD\"" в вашем терминале.Если проблема по-прежнему существует, то это должен быть экспорт (и это вероятная проблема).

Чтобы решить эту проблему, попробуйте printenv в python и в терминале, чтобы увидеть список экспорта.Вы должны увидеть несоответствие.Формат прост, так как вы можете просто скопировать вывод терминала printenv (который должен быть серией declare с) и вставить его в python, чтобы python получал те же переменные.Тогда ваши вызовы "/ bin / sh CMD" должны совпадать.

Обернутый /bin/sh на тот случай, если они запускают разные оболочки или имеют разные локальные переменные.echo $SHELL может подтвердить это, после чего вы можете сравнить set s и printenv s и скопировать вставку таким же образом.В завершение вам нужно только сравнить экспорты, так как это то, что передается дочерним процессам.

...