Когда вы используете 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)