dde*_*tts 3 powershell wildcard
我正在Python 3使用的Windows计算机上运行PowerShell。我试图执行一个Python文件,然后使用通配符将许多文件(file1.html,file2.html等)作为参数传递。我可以使它正常工作,执行以下几个步骤:
PS $files = Get-Item .\file*.html
PS python mypythonfile.py $files
Run Code Online (Sandbox Code Playgroud)
我的问题是,无需使用Get-Item并将结果分配给变量就可以做到这一点吗?我试过像这样运行相同的文件,python mypythonfile.py .\file*.html但这会导致Python解释器出错,因为PowerShell不会解析通配符,而是将字符串与通配符一起传递。
看来您在交互式控制台中。如果您只是想实现此目的,则无需将get-item的结果分配给变量。尝试这个:
python mypythonfile.py (get-item .\file*.html)
Run Code Online (Sandbox Code Playgroud)
尽管这可以解决问题,但您实际上应该使用get-item生成的结果对象的.FullName属性正确地将文件名传递给Python:
python mypythonfile.py (get-item .\file*.html).FullName
Run Code Online (Sandbox Code Playgroud)
尽管 Windows shell(即 PowerShell 和 CMD)确实支持glob patterns,但它们本身并不扩展模式(与 Unix shell 不同)。相反,应该支持通配符的命令必须自己实现通配符扩展。
Pythonglob为此提供了模块:
import sys
import glob
for arg in glob.glob(sys.args[1]):
print(arg)
Run Code Online (Sandbox Code Playgroud)
这允许您的脚本在调用时使用通配符处理参数,例如:
python script.py .\file*.html
Run Code Online (Sandbox Code Playgroud)
否则,您需要使用 PowerShell cmdlet 为您扩展通配符模式并返回路径列表,例如Get-ChildItem. 要么在变量中收集列表:
$files = Get-ChildItem .\file*.html | Select-Object -Expand FullName
python script.py $files
Run Code Online (Sandbox Code Playgroud)
或在表达式中运行 PowerShell 语句:
python script.py (Get-ChildItem .\file*.html | Select-Object -Expand FullName)
Run Code Online (Sandbox Code Playgroud)
import fileinput
for line in fileinput.input():
print(line.replace('\n',''))
Run Code Online (Sandbox Code Playgroud)
并将文件列表通过管道传输到您的脚本中:
Get-ChildItem .\file*.html | Select-Object -Expand FullName | python script.py
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3164 次 |
| 最近记录: |