Python脚本表示文件名、目录名或卷标语法不正确

2024-04-19 11:14:07 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好,我正在尝试制作一个python脚本,以实现一些自动化,从一些工具生成一个文件(不能命名它们,但命令会给您一个想法),而我制作了一个脚本,使用os.system将命令传递给cmd/terminal(在mycase中为cmd),如下所示

os.system('"' + dc_dir + '" --scan "' + in_dir + '" --out "' + out_dir + '\\'+ Project_name + '.csv' + '" --format CSV --enableExperimental')

and it returns "The filename, directory name, or volume label syntax is incorrect."

but when i print the exact same line and run it manually it works

print('"' + dc_dir + '" --scan "' + in_dir + '" --out "' + out_dir + '\\'+ Project_name + '.csv' + '" --format CSV --enableExperimental')

这是打印的命令

"C:\SBOM\dependency-check-6.2.2\bin\dependency-check.bat" --scan "C:\FinalScript\Source Codes\Sireous" --out "C:\SBOM\SiriusProgrammer_2_0.csv" --format CSV --enableExperimental

如果可能的话,请帮我解决这个问题


Tags: csvname命令脚本cmdformatscanos
2条回答

首先,借助f-string

os.system(f'{dc_dir}  scan {in_dir}  out {out_dir}\{Project_name}.csv  format CSV  enableExperimental')

让我们试着定位问题。为此,我们需要稍微重新组织您的代码:

  1. 这不是我们现在连接字符串的方式。就是这样:

    dc_dir = 'C:\\SBOM\\dependency-check-6.2.2\\bin\\dependency-check.bat'
    in_dir = 'C:\\FinalScript\\Source Codes\\'
    out_dir = 'C:\\SBOM\\'
    Project_name = 'SiriusProgrammer_2_0'
    
    f'{dc_dir}  scan {in_dir}{Project_name}  out {out_dir}{Project_name}.csv  format CSV  enableExperimental'
    
  2. 最好使用专门用于特定任务的库。pathlib将帮助您避免逃逸咔嗒声

    from pathlib import Path
    
    project_name = 'SiriusProgrammer_2_0'
    project_dir = Path('C', 'SBOM')
    
    dependency_check_bat = project_dir.joinpath('dependency-check-6.2.2', 'bin', 'dependency-check.bat')
    source_code_dir = Path('C', 'FinalScript', 'Source Codes', project_name)
    
    f'{dependency_check_bat.as_posix()}  scan {source_code_dir.as_posix()}  out {project_dir.joinpath(project_name).as_posix()}.csv  format CSV  enableExperimental'
    
  3. 至于主要问题,我建议使用subprocess,如果您想将变量传递给脚本,它非常方便:

    import subprocess
    
    process_run = subprocess.Popen([dependency_check_bat.as_posix(),
                                    ' scan',
                                    source_code_dir.as_posix(),
                                    ' out',
                                    f'{project_dir.joinpath(project_name).as_posix()}.csv',
                                    ' format CSV',
                                    ' enableExperimental'],
                                    stdout=subprocess.PIPE)
    
    terminal_output = process_run.communicate()[0]
    print(terminal_output)
    

让我们这样做,看看什么终端将返回给我们

相关问题 更多 >