Ошибка трубы с помощью скрипта bash, вызванного из python

Установите Git:
sudo apt-get install git
Создайте каталог для git:
mkdir git
cd git
Проверьте репозиторий:
git clone https://github.com/Bumblebee-Project/bumblebee-ui.git
cd bumblebee-ui
sudo ./INSTALL
Перейдите к Startup Applications и добавьте /usr/local/bin/bumblebee-indicator.
1
задан 25 December 2010 в 18:37

9 ответов

Чтобы запустить сценарий оболочки в python 2.6, используйте модуль commands:

import commands
status, output = commands.getstatusoutput("./script.sh")

status теперь является статусом существующей программы, надеюсь 0. Результат такой же, как если бы скрипт выполнялся следующим образом:

{ cmd ; } 2>&1

В python3 метод getstatusoutput переместился в подпроцесс,

import subprocess
status, output = subprocess.getstatusoutput("./script.sh")

Пожалуйста, обратитесь к:

подпроцессы

В стандартной библиотечной документации.

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

Еще лучший способ запустить ваш скрипт:

from subprocess import Popen, PIPE
output = Popen(["sh", "script.sh", ], stdout=PIPE).communicate()[0]

Он будет работать в python 2.6, 2.7, 3.1 и 3.2 .

Обратите внимание, что вы не можете использовать сценарий оболочки в этом методе, если хотите вывести вывод на печать, используйте этот метод:

p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]

В то время как модуль команд принимает "dmesg | grep hda"

2
ответ дан 25 May 2018 в 23:50
  • 1
    Стефано благодарен за ваш ответ. Я новичок в написании сценариев Python и shell, поэтому, пожалуйста, несите меня. Я попробовал ваш предложенный метод чуть ниже («Еще лучший способ запустить ваш скрипт:«), но я получаю сообщение об ошибке, что он не может найти script.sh. Когда я добавляю полный путь, я также получаю сообщение об ошибке. – joshu 24 December 2010 в 04:23
  • 2
    Какая же линия? это должно быть Popen(["sh", "script.sh", ], stdout=PIPE).communicate()[0] - обратите внимание, что команда, которую вы запускаете, является «sh», с «script.sh». как аргумент. команда и ее аргументы указываются в виде списка, например ["ls", "-l", ] – Stefano Palazzo♦ 24 December 2010 в 04:45
  • 3
    см. мое редактирование в моем оригинальном посте. благодаря – joshu 25 December 2010 в 18:37
  • 4
    @yonatan - это совершенно другой вопрос - есть несколько способов сделать это, я предлагаю вам спросить об этом в stackoverflow - вы получите ответ за считанные минуты. (На самом деле это будет задано раньше, и вы можете просто найти его) – Stefano Palazzo♦ 25 December 2010 в 22:18
  • 5
    нормально проблем не будет! Спасибо за вашу помощь. Счастливых праздников ;) – joshu 26 December 2010 в 00:12

Чтобы запустить сценарий оболочки в python 2.6, используйте модуль commands:

import commands status, output = commands.getstatusoutput("./script.sh")

status теперь является статусом существующей программы, надеюсь 0. Результат такой же, как если бы скрипт выполнялся следующим образом:

{ cmd ; } 2>&1

В python3 метод getstatusoutput переместился в подпроцесс,

import subprocess status, output = subprocess.getstatusoutput("./script.sh")

Пожалуйста, обратитесь к:

подпроцессы

В стандартной библиотечной документации.

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

Еще лучший способ запустить ваш скрипт:

from subprocess import Popen, PIPE output = Popen(["sh", "script.sh", ], stdout=PIPE).communicate()[0]

Он будет работать в python 2.6, 2.7, 3.1 и 3.2 .

Обратите внимание, что вы не можете использовать сценарий оболочки в этом методе, если хотите вывести вывод на печать, используйте этот метод:

p1 = Popen(["dmesg"], stdout=PIPE) p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) output = p2.communicate()[0]

В то время как модуль команд принимает "dmesg | grep hda"

2
ответ дан 25 July 2018 в 22:42

Чтобы запустить сценарий оболочки в python 2.6, используйте модуль commands:

import commands status, output = commands.getstatusoutput("./script.sh")

status теперь является статусом существующей программы, надеюсь 0. Результат такой же, как если бы скрипт выполнялся следующим образом:

{ cmd ; } 2>&1

В python3 метод getstatusoutput переместился в подпроцесс,

import subprocess status, output = subprocess.getstatusoutput("./script.sh")

Пожалуйста, обратитесь к:

подпроцессы

В стандартной библиотечной документации.

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

Еще лучший способ запустить ваш скрипт:

from subprocess import Popen, PIPE output = Popen(["sh", "script.sh", ], stdout=PIPE).communicate()[0]

Он будет работать в python 2.6, 2.7, 3.1 и 3.2 .

Обратите внимание, что вы не можете использовать сценарий оболочки в этом методе, если хотите вывести вывод на печать, используйте этот метод:

p1 = Popen(["dmesg"], stdout=PIPE) p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) output = p2.communicate()[0]

В то время как модуль команд принимает "dmesg | grep hda"

2
ответ дан 26 July 2018 в 23:50

Чтобы запустить сценарий оболочки в python 2.6, используйте модуль commands:

import commands status, output = commands.getstatusoutput("./script.sh")

status теперь является статусом существующей программы, надеюсь 0. Результат такой же, как если бы скрипт выполнялся следующим образом:

{ cmd ; } 2>&1

В python3 метод getstatusoutput переместился в подпроцесс,

import subprocess status, output = subprocess.getstatusoutput("./script.sh")

Пожалуйста, обратитесь к:

подпроцессы

В стандартной библиотечной документации.

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

Еще лучший способ запустить ваш скрипт:

from subprocess import Popen, PIPE output = Popen(["sh", "script.sh", ], stdout=PIPE).communicate()[0]

Он будет работать в python 2.6, 2.7, 3.1 и 3.2 .

Обратите внимание, что вы не можете использовать сценарий оболочки в этом методе, если хотите вывести вывод на печать, используйте этот метод:

p1 = Popen(["dmesg"], stdout=PIPE) p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) output = p2.communicate()[0]

В то время как модуль команд принимает "dmesg | grep hda"

2
ответ дан 2 August 2018 в 04:08

Чтобы запустить сценарий оболочки в python 2.6, используйте модуль :

  статус команд импорта, output = commands.getstatusoutput ("./ script.sh  ")  

status теперь является статусом существующей программы, надеюсь, 0 . Результат такой же, как если бы скрипт выполнялся следующим образом:

  {cmd;  } 2 & gt; 1  

В python3 метод getstatusoutput переместился в подпроцесс,

  импортирует статус подпроцесса, output = subprocess.getstatusoutput (".  /script.sh ")  

Обратитесь к:

В стандартной библиотечной документации.

Существует множество способов создания подпроцессов, и вам нужно оценить, какой из них является правильным методом в вашем случае , Обратитесь к subprocess docs, чтобы прочитать о них.

Еще лучший способ запустить ваш скрипт:

  из подпроцесса импортировать Popen,  PIPE output = Popen (["sh", "script.sh",], stdout = PIPE) .communicate () [0]  

Он будет работать в python 2.6, 2.7, 3.1 и 3.2.

Обратите внимание, что вы не можете использовать сценарий оболочки в этом методе, если хотите вывести вывод на печать, используйте этот метод:

  p1 = Popen (  ["dmesg"], stdout = PIPE) p2 = Popen (["grep", "hda"], stdin = p1.stdout, stdout = PIPE) output = p2.communicate () [0]  

Если модуль команд примет «dmesg | grep hda»

2
ответ дан 4 August 2018 в 20:11

Чтобы запустить сценарий оболочки в python 2.6, используйте модуль :

  статус команд импорта, output = commands.getstatusoutput ("./ script.sh  ")  

status теперь является статусом существующей программы, надеюсь, 0 . Результат такой же, как если бы скрипт выполнялся следующим образом:

  {cmd;  } 2 & gt; 1  

В python3 метод getstatusoutput переместился в подпроцесс,

  импортирует статус подпроцесса, output = subprocess.getstatusoutput (".  /script.sh ")  

Обратитесь к:

В стандартной библиотечной документации.

Существует множество способов создания подпроцессов, и вам нужно оценить, какой из них является правильным методом в вашем случае , Обратитесь к subprocess docs, чтобы прочитать о них.

Еще лучший способ запустить ваш скрипт:

  из подпроцесса импортировать Popen,  PIPE output = Popen (["sh", "script.sh",], stdout = PIPE) .communicate () [0]  

Он будет работать в python 2.6, 2.7, 3.1 и 3.2.

Обратите внимание, что вы не можете использовать сценарий оболочки в этом методе, если хотите вывести вывод на печать, используйте этот метод:

  p1 = Popen (  ["dmesg"], stdout = PIPE) p2 = Popen (["grep", "hda"], stdin = p1.stdout, stdout = PIPE) output = p2.communicate () [0]  

Если модуль команд примет «dmesg | grep hda»

2
ответ дан 6 August 2018 в 04:13

Чтобы запустить сценарий оболочки в python 2.6, используйте модуль :

  статус команд импорта, output = commands.getstatusoutput ("./ script.sh  ")  

status теперь является статусом существующей программы, надеюсь, 0 . Результат такой же, как если бы скрипт выполнялся следующим образом:

  {cmd;  } 2 & gt; 1  

В python3 метод getstatusoutput переместился в подпроцесс,

  импортирует статус подпроцесса, output = subprocess.getstatusoutput (".  /script.sh ")  

Обратитесь к:

В стандартной библиотечной документации.

Существует множество способов создания подпроцессов, и вам нужно оценить, какой из них является правильным методом в вашем случае , Обратитесь к subprocess docs, чтобы прочитать о них.

Еще лучший способ запустить ваш скрипт:

  из подпроцесса импортировать Popen,  PIPE output = Popen (["sh", "script.sh",], stdout = PIPE) .communicate () [0]  

Он будет работать в python 2.6, 2.7, 3.1 и 3.2.

Обратите внимание, что вы не можете использовать сценарий оболочки в этом методе, если хотите вывести вывод на печать, используйте этот метод:

  p1 = Popen (  ["dmesg"], stdout = PIPE) p2 = Popen (["grep", "hda"], stdin = p1.stdout, stdout = PIPE) output = p2.communicate () [0]  

Если модуль команд примет «dmesg | grep hda»

2
ответ дан 7 August 2018 в 22:15

Чтобы запустить сценарий оболочки в python 2.6, используйте модуль :

  статус команд импорта, output = commands.getstatusoutput ("./ script.sh  ")  

status теперь является статусом существующей программы, надеюсь, 0 . Результат такой же, как если бы скрипт выполнялся следующим образом:

  {cmd;  } 2 & gt; 1  

В python3 метод getstatusoutput переместился в подпроцесс,

  импортирует статус подпроцесса, output = subprocess.getstatusoutput (".  /script.sh ")  

Обратитесь к:

В стандартной библиотечной документации.

Существует множество способов создания подпроцессов, и вам нужно оценить, какой из них является правильным методом в вашем случае , Обратитесь к subprocess docs, чтобы прочитать о них.

Еще лучший способ запустить ваш скрипт:

  из подпроцесса импортировать Popen,  PIPE output = Popen (["sh", "script.sh",], stdout = PIPE) .communicate () [0]  

Он будет работать в python 2.6, 2.7, 3.1 и 3.2.

Обратите внимание, что вы не можете использовать сценарий оболочки в этом методе, если хотите вывести вывод на печать, используйте этот метод:

  p1 = Popen (  ["dmesg"], stdout = PIPE) p2 = Popen (["grep", "hda"], stdin = p1.stdout, stdout = PIPE) output = p2.communicate () [0]  

Если модуль команд примет «dmesg | grep hda»

2
ответ дан 10 August 2018 в 10:26

Чтобы запустить сценарий оболочки в python 2.6, используйте модуль :

  статус команд импорта, output = commands.getstatusoutput ("./ script.sh  ")  

status теперь является статусом существующей программы, надеюсь, 0 . Результат такой же, как если бы скрипт выполнялся следующим образом:

  {cmd;  } 2 & gt; 1  

В python3 метод getstatusoutput переместился в подпроцесс,

  импортирует статус подпроцесса, output = subprocess.getstatusoutput (".  /script.sh ")  

Обратитесь к:

В стандартной библиотечной документации.

Существует множество способов создания подпроцессов, и вам нужно оценить, какой из них является правильным методом в вашем случае , Обратитесь к subprocess docs, чтобы прочитать о них.

Еще лучший способ запустить ваш скрипт:

  из подпроцесса импортировать Popen,  PIPE output = Popen (["sh", "script.sh",], stdout = PIPE) .communicate () [0]  

Он будет работать в python 2.6, 2.7, 3.1 и 3.2.

Обратите внимание, что вы не можете использовать сценарий оболочки в этом методе, если хотите вывести вывод на печать, используйте этот метод:

  p1 = Popen (  ["dmesg"], stdout = PIPE) p2 = Popen (["grep", "hda"], stdin = p1.stdout, stdout = PIPE) output = p2.communicate () [0]  

Если модуль команд примет «dmesg | grep hda»

2
ответ дан 13 August 2018 в 16:53
  • 1
    Стефано благодарен за ваш ответ. Я новичок в написании сценариев Python и shell, поэтому, пожалуйста, несите меня. Я попробовал ваш предложенный метод чуть ниже («Еще лучший способ запустить ваш скрипт:«), но я получаю сообщение об ошибке, что он не может найти script.sh. Когда я добавляю полный путь, я также получаю сообщение об ошибке. – joshu 24 December 2010 в 04:23
  • 2
    Какая же линия? это должно быть Popen (["sh", "script.sh",], stdout = PIPE) .communicate () [0] - обратите внимание, что команда, которую вы запускаете, является "sh" , с "script.sh" как аргумент. команда и ее аргументы указываются как список, это ["ls", "-l",] , например – Stefano Palazzo♦ 24 December 2010 в 04:45
  • 3
    см. мое редактирование в моем оригинальном посте. благодаря – joshu 25 December 2010 в 18:37
  • 4
    @yonatan - это совершенно другой вопрос - есть несколько способов сделать это, я предлагаю вам спросить об этом в stackoverflow - вы получите ответ за считанные минуты. (На самом деле это будет задано раньше, и вы можете просто найти его) – Stefano Palazzo♦ 25 December 2010 в 22:18
  • 5
    нормально проблем не будет! Спасибо за вашу помощь. Счастливых праздников ;) – joshu 26 December 2010 в 00:12

Другие вопросы по тегам:

Похожие вопросы: