在python中的sys.argv中加注星形

时间:2013-07-16 14:49:01

标签: python

我正在尝试编写一个利用sys.argv来包装scp命令的脚本。这个想法是,您将能够运行:pyscp folder/* host但是如果我使用这些参数运行此脚本:

import sys

for arg in sys.argv:
    print arg

我得到了folder中所有文件夹的列表:

pyscp.py
folder/0
folder/1
folder/2
folder/3
folder/4
folder/5
folder/67
folder/8
folder/9
host

3 个答案:

答案 0 :(得分:6)

假设有一个UNIXoid操作系统:shell正在将*扩展为匹配的文件。尝试调用您的脚本

pyscp "folder/*" host

引号使shell无法解释*字符。

答案 1 :(得分:2)

如果你没有转义星号,那么shell正在为你执行文件名扩展。包含星号的模式将替换为在执行Python程序之前与模式匹配的按字母顺序排序的文件名列表。您可以阻止shell使用例如执行文件名扩展单引号,即

pyscp 'folder/*' hostname

然后,您可以使用glob模块在​​Python中自己完成此操作,并按照您希望的方式控制事物。

答案 2 :(得分:-2)

shell正在为您扩展文件列表。您可以通过在命令中允许多个参数来利用这一点。

import sys
files = sys.argv[1:-1]
host = sys.argv[-1]

现在你有了一个更灵活的程序,让调用者可以跳过他想要传输的任何环节,比如文件夹1中的所有文本文件加上在文件夹2中最后一天更改的任何内容(在linux机器上):

pyscp folder1/*.txt `find -mtime -1` example.com