2015-12-10 2 views
1

Мне интересно, как исправить ваш bashrc из python. Я автоматизирую превращение скриптов в псевдонимы и многое другое. Вот то, что я вижу в скорлупе:Как исправить bashrc/bashprofile из скрипта python

In [6]: subprocess.call(['sudo', 'source', '/home/cchilders/.bashrc']) 
sudo: source: command not found 
Out[6]: 1 

In [7]: subprocess.call(['sudo', '.', '/home/cchilders/.bashrc']) 
sudo: .: command not found 

Спасибо

+3

'source' - это встроенный bash, поэтому вам нужно будет использовать источник bash -c ..." '. Тем не менее, это не будет иметь никакого эффекта, который вы ищете, поскольку параметры оболочки исчезнут, когда процесс bash завершится. Вам нужно сделать это * до того, как вы запустите python. –

+0

Что делать, если я вызываю скрипт оболочки, который только что генерирует изнутри python – codyc4321

+1

, это не будет делать то, что вы хотите .... нет способа вызвать rc и иметь какой-либо эффект в оболочке или скрипте python .... что вы на самом деле пытаетесь достичь? возможно, другие способы сделать это ... –

ответ

1

При использовании subprocess.call, вы не используете оболочку - примечание от: https://docs.python.org/2/library/subprocess.html#subprocess.call

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)

по умолчанию для subprocess.call не среда, как вы не в оболочке , Источник - это встроенный bash, поэтому нет никакой программы для выполнения подпроцесса. И, вероятно, большая часть кода в вашем bashrc будет бессмысленной для вызова в контексте подпроцесса.

Что вы можете сделать, это предоставить более подробную информацию о том, что вы пытаетесь выполнить, опираясь на файл bashrc, который можно сделать более питоническим способом.

1

sudo source не будет работать, потому что источник является оболочкой встроенный. Я не уверен в технических причинах, почему вы не можете sudo source, так как sudo echo работает просто отлично, но попробуйте использовать subprocess.call(['.', '/home/cchilders/.bashrc']) или что бы это ни было эквивалентно.

+1

type 'which source' .... вот почему вы не можете использовать его –

+3

или' type -a source' versus 'type -a echo' - вот почему« sudo echo »работает –

+0

Я думаю, что вы можете сделать' subprocess. call ("source /home/user/.bashrc", shell = True) '... но, как упоминалось в комментариях к OP, это не будет иметь желаемого эффекта, даже если ему удастся заставить его работать –

Смежные вопросы