проверьте, было ли выполнение внешней программы успешным. subprocess.call [duplicate]

use substring_index, в приведенном ниже примере я создал таблицу со столбцом score1 и score2, score1 имеет 3-7, score2 7-3 и т. д., как показано на изображении. Следующий запрос способен разделить с помощью «-» и изменить порядок оценки2 и сравнить с score1

SELECT CONCAT(SUBSTRING_INDEX(score1,'-',1),
SUBSTRING_INDEX(score1,'-',-1)) as my_score1,
CONCAT(SUBSTRING_INDEX(score2,'-',-1),SUBSTRING_INDEX(score2,'-',1)) as my_score2
FROM test HAVING my_score1=my_score2

55
задан ferkulat 22 May 2013 в 22:38
поделиться

3 ответа

Использовать subprocess.Popen:

import subprocess
process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE)
out, err = process.communicate()
print(out)

Обратите внимание, что связывают блоки до тех пор, пока процесс не завершится. Вы можете использовать process.stdout.readline (), если вам нужен выход до его завершения. Для получения дополнительной информации см. Документацию .

74
ответ дан Michael Smith 18 August 2018 в 20:04
поделиться
  • 1
    Правильной текущей ссылкой doc для версии subprocess версии Python 2.7 является: docs.python.org/library/… ; для Python 3.2, docs.python.org/py3k/library/… – Ned Deily 12 July 2011 в 00:09
  • 2
    Вероятно, вам нужно заменить subprocess.communicate () с помощью process.communicate () - вам также может понадобиться код выхода подпроцесса, выполнив process.returncode – Cinquo 12 July 2011 в 00:11
  • 3
    Я не заметил, что я написал подпроцесс вместо процесса. Исправлена. – Michael Smith 12 July 2011 в 00:13
  • 4
    какие типы выходят и ошибаются? являются ли они регулярными строками или являются ли они массивами или словарями? – scottyseus 6 August 2013 в 19:02
  • 5
    Прекрасно работает для out, но err будет неинициализирован, а выход ошибки будет напечатан на экране. Вы должны указать stderr=subprocess.PIPE в дополнение к stdout, чтобы получить стандартную ошибку. – Griddo 20 August 2014 в 20:09

Для Python> = 2.7 используйте subprocess.check_output().

http://docs.python.org/2/library/subprocess.html#subprocess.check_output

37
ответ дан knite 18 August 2018 в 20:04
поделиться
  • 1
    Технически это должно быть subprocess.check_output(cmd, shell=True). – Cerin 18 April 2016 в 17:23
  • 2
    Какая разница в оболочке True или False? – Ricky Wilson 31 July 2017 в 16:11
  • 3
    Я думаю, что он позволяет «специфичные для оболочки функции». как файловое подгонка, трубопровод и т. д. ... – Rafael T 20 September 2017 в 13:41
  • 4
    – Jordan Stefanelli 14 October 2018 в 09:39

Чтобы ловить ошибки с помощью subprocess.check_output(), вы можете использовать CalledProcessError. Если вы хотите использовать вывод в виде строки, декодируйте его из байт-кода.

# \return String of the output, stripped from whitespace at right side; or None on failure.
def runls():
    import subprocess
    try:
        byteOutput = subprocess.check_output(['ls', '-a'], timeout=2)
        return byteOutput.decode('UTF-8').rstrip()
    except subprocess.CalledProcessError as e:
        print("Error in ls -a:\n", e.output)
        return None
1
ответ дан Roi Danton 18 August 2018 в 20:04
поделиться
Другие вопросы по тегам:

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