Как вызвать команды оболочки с каналами, используя subprocess.run? - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть следующий код в скрипте Python

    inputfile = sys.argv[1];

    subprocess.run(["cat",
            inputfile, "| sh script1.sh | sh script2.sh | uniq  > outputfile.txt"], check=True, shell=True)

В настоящее время он просто зависает, если я его запускаю.Что я делаю неправильно?Я предполагаю, что аргумент inputfile неверен.

1 Ответ

0 голосов
/ 19 декабря 2018

Когда вы используете shell=True, первый аргумент subprocess.run должен быть строкой , а не списком .Когда вы передаете список, используется только первый элемент, поэтому ваш вызов эквивалентен:

subprocess.run("cat", check=True, shell=True)

... что, конечно, будет просто зависать навсегда в ожидании ввода.

Обновление

Таким образом, ваша команда будет выглядеть примерно так:

subprocess.run("cat {} | sh script1.sh | sh script2.sh | uniq  > outputfile.txt".format(inputfile),
               check=True, shell=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...