如何在Pythonbrew中使用带空格的位参数?

1 投票
2 回答
572 浏览
提问于 2025-04-16 20:23

我一直在使用argparse模块来接受程序的输入,效果很好。我定义了大约六个可选参数(这些参数前面需要加上--,可以随意放在列表中)和一个位置参数(这是必须的参数,按照放置的顺序来确定),所以我的使用情况大致如下(为了简洁,省略了一些可选参数):

usage: Main.py [-h] [--site SITE] [--username USERNAME] [--password PASSWORD]
           [--verbose]
           filepath

为了在Debian上运行Python 2.7脚本(Debian自带的是Python 2.6),我成功地使用了pythonbrew,这个工具可以让多个Python版本在同一台服务器上共存。使用它的一个好处是,我可以关闭脚本的可执行权限,这样用户管理对我来说就简单多了。

一切都很好,直到我尝试将文件保存到一个包含空格的文件路径(我的唯一位置参数)时,我发现我做不到!

pythonbrew py Main.py --verbose /media/rackspace/db1/clients/My\ Client/
pythonbrew py Main.py --verbose '/media/rackspace/db1/clients/My\ Client/'
pythonbrew py Main.py --verbose "/media/rackspace/db1/clients/My\ Client/"
pythonbrew py Main.py --verbose [/media/rackspace/db1/clients/My\ Client/]

pythonbrew py Main.py --verbose /media/rackspace/db1/clients/My Client/
pythonbrew py Main.py --verbose '/media/rackspace/db1/clients/My Client/'
pythonbrew py Main.py --verbose "/media/rackspace/db1/clients/My Client/"
pythonbrew py Main.py --verbose [/media/rackspace/db1/clients/My Client/]

所有尝试都会返回相同的错误信息

Main.py: error: unrecognized arguments: Client

有没有人能确认这个错误?因为在Python的讨论组里没有人提到过这个问题,我觉得这可能是pythonbrew的一个bug,但我希望能继续使用pythonbrew,并找到其他方法来运行这个脚本。目前,我只是把文件存储到一个没有空格的文件夹里,但我希望有人能帮我解决这个错误。

2 个回答

1

我还太新,不能发评论,但你有没有试过在空格前面加个反斜杠(\)来处理空格呢?也许可以这样写:

pythonbrew py Main.py --verbose /media/rackspace/db1/clients/My\ Client/

2

问题出在 pythonbrew/commands/py.py 这个文件里。每次调用 subprocess.Popen() 的时候,都需要把命令从字符串改成列表的形式。

撰写回答