很多初学者在使用Python期间,尤其是Windows环境下,常会遇到:
给命令行或代码参数中传递路径时,路径中包含了空格
其不知道路径中的空格,会导致实际上传递的参数,已经被空格分开为多个部分,因而出现找不到子路径等异常情况。
pyinstaller打包时路径带空格导致异常
某人用PyInstaller去打包python程序,用命令:
C:\Users\Administrator>pyinstaller -F D:\python VIP\chap16\stusystem
结果出错:
39 INFO: PyInstaller: 4.1
39 INFO: Python: 3.9.0
39 INFO: Platform: Windows-10-10.0.18362-SP0
40 INFO: wrote C:\Users\Administrator\python.spec
41 INFO: UPX is not available.
script 'C:\Users\Administrator\VIP\chap16\stusystem' not found
其中很明显就是:
-F参数所传入的路径D:\python VIP\chap16\stusystem中间有空格
导致实际结果相当于:
C:\Users\Administrator>pyinstaller -F D:\python
而此处很明显Windows中只存在目录D:\python VIP,而(估计)不存在D:\python
所以导致最后报错找不到相关目录:
script 'C:\Users\Administrator\VIP\chap16\stusystem' not found
根本原因:
各种系统(Windows、Linux、Mac等)中的路径,往往是通过空格去区分参数的
your_command parameter1 parameter2
命令行环境
代码运行环境
中,所以,如果路径中有空格,往往会导致路径被空格区分开,变成多个参数,导致传入的路径本身不对,且后续其他参数也不正常了,导致结果异常
对于此处的pyinstaller的命令行参数语法是:
~ pyinstaller --help
usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME]
[--add-data ]
[--add-binary ] [-p DIR]
[--hidden-import MODULENAME]
[--additional-hooks-dir HOOKSPATH]
[--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES]
[--key KEY] [-d {all,imports,bootloader,noarchive}] [-s]
[--noupx] [--upx-exclude FILE] [-c] [-w]
[-i ]
[--version-file FILE] [-m ] [-r RESOURCE]
[--uac-admin] [--uac-uiaccess] [--win-private-assemblies]
[--win-no-prefer-redirects]
[--osx-bundle-identifier BUNDLE_IDENTIFIER]
[--runtime-tmpdir PATH] [--bootloader-ignore-signals]
[--distpath DIR] [--workpath WORKPATH] [-y]
[--upx-dir UPX_DIR] [-a] [--clean] [--log-level LEVEL]
scriptname [scriptname ...]
此处如果输入:
pyinstaller -F D:\python VIP\chap16\stusystem
其实变成了:
参数1:-F D:\python
参数2:VIP\chap16\stusystem
-F参数的值是:D:\python
scriptname参数的值是:VIP\chap16\stusystem
很明显,不是我们希望的结果了,就会导致异常报错了。
解决办法:尤其是命令行操作时,或者代码调用传入的路径时,要确保传入的路径中不能包含空格
如果路径中包含空格,则可以用(双)引号括起来:
pyinstaller -F "D:\python VIP\chap16\stusystem"
这样就是我们希望的效果了:
参数1:-F "D:\python VIP\chap16\stusystem"
-F参数的值是:D:\python VIP\chap16\stusystem
即可正常运行。
crifan.com,使用署名4.0国际(CC BY 4.0)协议发布 all right reserved,powered by Gitbook最后更新:
2020-12-23 21:15:20
路径中包含空格很多初学者在使用Python期间,尤其是Windows环境下,常会遇到:给命令行或代码参数中传递路径时,路径中包含了空格其不知道路径中的空格,会导致实际上传递的参数,已经被空格分开为多个部分,因而出现找不到子路径等异常情况。举例:pyinstaller打包时路径带空格导致异常某人用PyInstaller去打包python程序,用命令:C:\Users\Administrator>...
最近在采集windows上
中
间件的时候,遇到了文件
路径
有
空格
的问题。
例如:Aapche的安装
路径
为D:\Program Files\Apache Software Foundation\Apache2.2。
采集apache要读取配置文件D:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf
执行一些D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe -v 这种命令。
读取配置文件是没有问题的,因为用的是
python
代码,打开
在打开plist文档遇到
路径
中
有
空格
的问题。添加以下即可。
因为将文件直接拖入终端后会在
空格
前添加 \ ,删除即可~
python
/Users/robbie/Desktop/read_plist_file.py
Please input your plist file:/Users/robbie/Downloads/Users\ 2/2020\ 05\ 05/PDCA.plist
Please input your plist file:/Users/robbie/Downloads/Users\ 2
windows系统使用
python
压缩文件到一个有
空格
的文件
路径
里面,结果一直报错压缩不到指定的文件夹里面去,而是压缩到了那个
空格
之前的文件夹里面,试了好久终于找到了一个很简单的方法。
具体如下:
opt = "Rar.exe a -ep1 %s %s\\*.*" %(folder,temp_folder)
变量folder是一个
带
空格
的
路径
:E:\bak_log\ztc\vms\s
创建文件夹的时候,后面没有加 ‘/’,到循环体
中
再加,报错。
predict_res_save_path = 'predict_results/' + time.strftime("%Y_%m_%d_%H_%M_%S ", time.localtime())
if not os.path.exists('predict_res_save_path'):
print...
img_dir = []
for parent, dirnames, filenames in os.walk(rootdir):
for img_one in filenames:
new_filename = img_one.replace(
要读取
带
有
空格
的
路径
,可以使用
Python
中
的原始字符串(raw string)来避免
空格
被解释成特殊字符。在原始字符串
中
,反斜杠字符不会被解释为转义字符。
例如,如果想读取
路径
为 "C:\Users\username\Documents\file.txt" 的文件,可以使用如下代码:
path = r'C:\Users\username\Documents\file.txt'
使用原始字符串时,在字符串前面加上一个 "r",这样
Python
就会将字符串按照原样进行解析,而不会将反斜杠字符解释成转义字符。这样就可以正确地读取
带
有
空格
的
路径
了。