相关文章推荐
沉稳的生菜  ·  PowerShell脚本运行完 ...·  1 周前    · 
坚韧的开心果  ·  python 调用 powershell ...·  2 周前    · 
笑点低的帽子  ·  FileNotFoundError: ...·  4 周前    · 
俊逸的萝卜  ·  progressive web apps ...·  1 年前    · 

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

0 人关注

嗨,我想做一个Python脚本来做一些自动化操作,从一些工具中生成一个文件(无法命名,但命令会给你一个概念),同时我做了一个脚本,使用os.system将命令传递给cmd/terminal(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

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

1 个评论
试着使用双斜杠来表示窗口路径,即 --scan "C:\\FinalScript\\Source Codes\\SiriusProgrammer_2_0 ...
python
python-3.x
csv
automation
Shubhankar Pradhan
Shubhankar Pradhan
发布于 2021-08-31
2 个回答
Marya
Marya
发布于 2021-08-31
已采纳
0 人赞同

让我们试着把问题本地化。要做到这一点,我们需要重新组织一下你的代码。

  • 这不是我们现在连接字符串的方式。这就是方式。

    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'
    
  • 最好是使用专门用于特定任务的库。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'
    
  • 至于主要问题,我建议使用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)
    
  •