簡體   English   中英

避免在子命令中使用 escaping 美元符號?

[英]Avoid escaping dollar sign in a subcommand?

我需要處理一個文件並立即將其上傳到某處。 考慮這個例子,想象我們正在做aws s3 cp - s3://some-path/$FILE而不是dd調用:

from plumbum.cmd import split, seq, rev, dd
my_filter = (rev | dd['of=$FILE'])
cmd = seq['1', '10'] | split['--filter', str(my_filter)]

鑒於 $FILE 不是直接傳遞而是轉義的,因此split中的子命令會創建一個名為$FILE的文件。 我怎樣才能讓它不逃避美元表達式,而是逐字逐句?

作為一個臨時解決方案,我決定對plumbumshquote進行猴子補丁:

from plumbum.cmd import split, seq, rev, dd

import plumbum
import unittest.mock as mock
# HACK: disable quoting of every argument in shquote
# otherwise we'd get --filter="dd 'of=$FILE'"
# which would create a file named $FILE anyway
with mock.patch('plumbum.commands.base.shquote', lambda x: x):
    my_filter = str(rev | dd['of=$FILE'])

funnychars_new = plumbum.commands.base._funnychars.replace('$', '')
# HACK: don't treat dollar sign as an escapeable character
with mock.patch('plumbum.commands.base._funnychars', funnychars_new):
    cmd = seq['1', '10'] | split['--filter', my_filter]
    print(cmd)
    cmd & plumbum.FG

把它放在命令執行之前為我解決了這個問題,但我歡迎另一個解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM