繁体   English   中英

在python的sys.argv中加注星号

[英]Star in sys.argv in 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

假设使用UNIXoid操作系统:Shell将*扩展为匹配的文件。 尝试像这样调用脚本

pyscp "folder/*" host

引号使外壳程序无法解释*字符。

如果您不转义星号,则说明Shell正在为您执行文件名扩展。 在执行Python程序之前,包括星号在内的模式被替换为与该模式匹配的文件名的字母顺序列表。 您可以使用例如单引号来防止外壳执行文件名扩展,即

pyscp 'folder/*' hostname

然后,您可以使用glob模块在Python中自己进行操作,并按所需方式控制事物。

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

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

现在,您有了一个更灵活的程序,该程序可以使呼叫者跳过他要进行传输的任何条件,例如,文件夹1中的所有文本文件,以及文件夹2中最后一天发生的更改(在Linux计算机上):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM