我正在尝试编写一个利用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
答案 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