调用Linux file命令时subprocess出现使用错误,请求排查参数问题
问题原因及解决办法
问题出在shell=True的使用方式上:当启用shell=True时,subprocess.run接收的第一个参数应该是单个完整的命令字符串,而不是列表格式。你当前传的["file", from_file_path]会被shell当作一个整体命令名去查找,自然找不到合法命令,因此返回Usage提示。
给出两种可行修复方案:
方案一(推荐,更安全):移除
shell=True,保留列表参数
这种方式不需要shell解析,避免潜在的shell注入风险,同时参数传递更准确:subprocess.run(["file", from_file_path], check=True)方案二(若必须用
shell=True):拼接为单个命令字符串
把命令和参数整合成一个字符串传递,注意如果文件路径包含空格或特殊字符,要用shlex.quote()转义:import shlex subprocess.run(f"file {shlex.quote(from_file_path)}", check=True, shell=True)
你提到其他subprocess调用可正常操作该文件,说明文件本身无问题,只需修正subprocess.run的参数格式即可解决。
内容的提问来源于stack exchange,提问作者user18530011
相关产品推荐
相关产品推荐

