在python中将子流程输出管道化到stdin不起作用
我想检查文件的格式是否正确在python中将子流程输出管道化到stdin不起作用,python,subprocess,Python,Subprocess,我想检查文件的格式是否正确 command_process = subprocess.Popen('black -q file_utils.py'.split(' '), stdout=subprocess.PIPE) subprocess.run(['diff', '-q', 'file_utils.py'], stdin=command_process.stdout, stdout=subprocess.PIPE, universal_newlines=True) 我在
command_process = subprocess.Popen('black -q
file_utils.py'.split(' '), stdout=subprocess.PIPE)
subprocess.run(['diff', '-q', 'file_utils.py'],
stdin=command_process.stdout, stdout=subprocess.PIPE, universal_newlines=True)
我在上面的命令中得到以下错误
diff: missing operand after `file_utils.py'
diff: Try `diff --help' for more information.
CompletedProcess(args=['diff', '-q', 'file_utils.py'], returncode=2, stdout='')
diff
需要被告知从标准输入读取
subprocess.run(['diff', '-q', 'file_utils.py', '-'],
stdin=command_process.stdout, stdout=subprocess.PIPE, universal_newlines=True)
或
取决于您想要的顺序。不要使用
str.split
;它不遵循shell语法规则。手动构造列表,或使用shlex.split
。
subprocess.run(['diff', '-q', '-', 'file_utils.py'],
stdin=command_process.stdout, stdout=subprocess.PIPE, universal_newlines=True)