make_dir = os.path.join(os.path.dirname(__file__), '../../', 'util')
cpp_lib_result = subprocess.run(['make', '-C', make_dir, 'all'], shell=True, check=True, capture_output=True)
cpp_lib_result = subprocess.run('make -C %s all' % make_dir, shell=True, check=True, capture_output=True)
上面是调用makefile
的示例代码。
第二行将失败,并显示此消息。
subprocess.CalledProcessError: Command '['make', '-C', '../../util', 'all']' returned non-zero exit status 2.
如果我在第二行中删除shell=True
,它将起作用。
第三行即使在shell=True
下也可以使用。
我在某处读到shell=True
对参数很挑剔。但我找不到任何进一步的信息。这些参数到底有多挑剔?
我还被告知要使用列表而不是字符串。为什么首选使用列表?