python中sys.argv中的星号

python中sys.argv中的星号,python,Python,我正在尝试编写一个脚本,该脚本使用sys.argv包装scp命令。这个想法是,您将能够运行:pyscp folder/*host,但是如果我使用这些参数运行这个脚本: import sys for arg in sys.argv: print arg 我得到了文件夹中所有文件夹的列表: pyscp.py folder/0 folder/1 folder/2 folder/3 folder/4 folder/5 folder/67 folder/8 folder/9 host 假设使

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

import sys

for arg in sys.argv:
    print arg
我得到了
文件夹中所有文件夹的列表

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解释
*
字符。

假设使用UNIXoid操作系统:shell正在将
*
扩展到匹配的文件中。试着像这样调用脚本

pyscp "folder/*" host

引号防止shell解释
*
字符。

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

pyscp 'folder/*' hostname

然后,您可以在Python中使用
glob
模块自己完成这项工作,并按照您想要的方式进行控制。

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

pyscp 'folder/*' hostname

然后,您可以在Python中使用
glob
模块自己完成这项工作,并以您想要的方式进行控制。

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

import sys
files = sys.argv[1:-1]
host = sys.argv[-1]
现在您有了一个更灵活的程序,可以让调用者跳过任何他想要的传输环,比如folder1中的所有文本文件,以及folder2(在linux机器上)中最后一天更改的任何内容:


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

import sys
files = sys.argv[1:-1]
host = sys.argv[-1]
现在您有了一个更灵活的程序,可以让调用者跳过任何他想要的传输环,比如folder1中的所有文本文件,以及folder2(在linux机器上)中最后一天更改的任何内容:



预期的行为是什么?预期的行为是什么?
*
是星号,
&
是一个符号。两者都以a开头,我经常把它们混在一起…-)@Jan PhilipGehrcke
*
是一颗像紫菀一样的星星。而
&
是一个符号。所以我不是唯一一个在使用正确的单词之前必须三思而后行的人?
*
是一个星号,
&
是一个符号。两者都以a开头,我经常把它们混在一起@Jan PhilipGehrcke
*
是一颗像紫菀一样的星星。而
&
是一个符号。所以我不是唯一一个在使用正确的词之前必须三思而后行的人?@andy-让shell来做扩展。您可以说
files=sys.argv[1:-1]
host=sys.argv[-1]
,您的程序将像大家期望的那样使用shell。六羟甲基三聚氰胺六甲醚。。。也许这应该是一个答案。@andy-让shell进行扩展。您可以说
files=sys.argv[1:-1]
host=sys.argv[-1]
,您的程序将像大家期望的那样使用shell。六羟甲基三聚氰胺六甲醚。。。也许这应该是一个答案。在像这样的反勾号中使用
find
是非常错误的方法——它会拆分字符串并用glob扩展find的结果,因此名称中带有空格、空格或glob表达式的文件名很容易出错。因此,更安全的方法是:
A=();而IFS=''read-r-d'';做一个+=(“回复”);完成<@查尔斯·达菲。无论什么关键是,您可以使用shell选择文件,如果您知道您的文件名没有空格或shell元字符,则“查找”示例可以正常工作。您何时知道脚本将使用或针对哪些文件运行?编写在满足任意条件时中断的代码简直是鲁莽;同样地,为他人树立榜样。另请参见@Charles Duffy中的条目#1-“脚本”是python代码(工作正常)。你一直在谈论的是一个用法的例子。您是否真的将在命令行上键入的所有内容都润色到第n级?前几天我需要在我们的发行目录中找到所有的PDF。知道我做了什么吗<代码>查找-iname“*.pdf”
。我不骗你。猜猜看-它起作用了。
find
语句没有任何错误,除非你把它放在反引号中,让shell迭代它的输出。嗯,几乎什么都没有;如果您有任何名称中有换行符的PDF文件(UNIX文件系统允许除
/
NUL
以外的任何字符,因此换行符当然是可能的),您将得到错误的结果(根据find的版本,您可能无法区分换行符分隔的部分和实际的文件名,或者您会得到不正确的“文件名”)。在像这样的反勾号中使用
find
是非常错误的方法——它会拆分字符串并用glob扩展find的结果,因此名称中带有空格、空格或glob表达式的文件名很容易出错。因此,更安全的方法是:
A=();而IFS='read-r-d';doa+=(“REPLY”);done<@Charles Duffy.随便了。关键是你可以使用shell选择文件,如果你知道你的文件名没有空格或shell元字符,那么“查找”示例就可以正常工作。你什么时候知道你的脚本将使用或针对哪些文件运行?编写在满足任意条件时中断的代码是不可能的缺少鲁莽;以鲁莽为例