0

我正在尝试编写一个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
4

3 回答 3

6

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

pyscp "folder/*" host

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

于 2013-07-16T14:52:35.747 回答
2

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

pyscp 'folder/*' hostname

然后,您可以在 Python 中使用该glob模块自己执行此操作,并以您想要的方式控制事物。

于 2013-07-16T14:53:44.393 回答
-2

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

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

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

pyscp folder1/*.txt `find -mtime -1` example.com
于 2013-07-16T17:01:04.917 回答