如何使用 python 将转义字符作为命令行参数传递
How to pass escape characters as command line parameters using python
我写了一个python脚本需要2个命令行参数,第二个参数有一些'&'
。而且我收到错误zsh parse error near &',所以我尝试引用和双引号这2个参数但结果出错了。代码简化如下:
import base64, hmac, urllib, sys
from hashlib import sha256
def signature(secret_access_key, string_to_sign):
h = hmac.new(secret_access_key, digestmod=sha256)
h.update(string_to_sign)
sign = base64.b64encode(h.digest()).strip()
return urllib.quote_plus(sign)
if __name__ == '__main__':
secret_access_key = 'a'
string_to_sign = 'b\nc\nd&e&f'
print signature(secret_access_key, string_to_sign)
print signature(sys.argv[1], sys.argv[2])
print sys.argv[2] == string_to_sign
下面是pycharm
中的配置
print sys.argv[2] == string_to_sign
返回 False
和
signature(secret_access_key, string_to_sign)
的结果是我所期望的,但我需要在命令行中传递这两个参数。
那么有什么办法可以在命令行中转义 '&'
和 '\n'
吗?
您需要在输入参数两边加上引号:
python yourscript.py "a" "b\nc\nd\&ef"
并更改您的脚本以将字符串 "\n"
替换为回车符 return:
import base64, hmac, urllib, sys
from hashlib import sha256
def signature(secret_access_key, string_to_sign):
h = hmac.new(secret_access_key, digestmod=sha256)
h.update(string_to_sign)
sign = base64.b64encode(h.digest()).strip()
return urllib.quote_plus(sign)
if __name__ == '__main__':
secret_access_key = 'a'
string_to_sign = 'b\nc\nd&e&f'
input_argument = sys.argv[2].replace(r'\n','\n')
print signature(secret_access_key, string_to_sign)
print signature(sys.argv[1], input_argument)
print input_argument == string_to_sign
这给出了输出:
iF5JXP343nGyFhcagBhVDVDSnECQpHDMnuq%2F6ryFzBc%3D
iF5JXP343nGyFhcagBhVDVDSnECQpHDMnuq%2F6ryFzBc%3D
True
如果你想包含文字换行符;你可以在 bash 中使用 $''
,zsh:
$ python -c'import sys; print(sys.argv)' a $'b\nc\nd&e&f'
['-c', 'a', 'b\nc\nd&e&f']
如果您想要两个字符:反斜杠 + n
然后删除 $
:
$ python -c'import sys; print(sys.argv)' a 'b\nc\nd&e&f'
['-c', 'a', 'b\nc\nd&e&f']
我写了一个python脚本需要2个命令行参数,第二个参数有一些'&'
。而且我收到错误zsh parse error near &',所以我尝试引用和双引号这2个参数但结果出错了。代码简化如下:
import base64, hmac, urllib, sys
from hashlib import sha256
def signature(secret_access_key, string_to_sign):
h = hmac.new(secret_access_key, digestmod=sha256)
h.update(string_to_sign)
sign = base64.b64encode(h.digest()).strip()
return urllib.quote_plus(sign)
if __name__ == '__main__':
secret_access_key = 'a'
string_to_sign = 'b\nc\nd&e&f'
print signature(secret_access_key, string_to_sign)
print signature(sys.argv[1], sys.argv[2])
print sys.argv[2] == string_to_sign
下面是pycharm
中的配置
print sys.argv[2] == string_to_sign
返回 False
和
signature(secret_access_key, string_to_sign)
的结果是我所期望的,但我需要在命令行中传递这两个参数。
那么有什么办法可以在命令行中转义 '&'
和 '\n'
吗?
您需要在输入参数两边加上引号:
python yourscript.py "a" "b\nc\nd\&ef"
并更改您的脚本以将字符串 "\n"
替换为回车符 return:
import base64, hmac, urllib, sys
from hashlib import sha256
def signature(secret_access_key, string_to_sign):
h = hmac.new(secret_access_key, digestmod=sha256)
h.update(string_to_sign)
sign = base64.b64encode(h.digest()).strip()
return urllib.quote_plus(sign)
if __name__ == '__main__':
secret_access_key = 'a'
string_to_sign = 'b\nc\nd&e&f'
input_argument = sys.argv[2].replace(r'\n','\n')
print signature(secret_access_key, string_to_sign)
print signature(sys.argv[1], input_argument)
print input_argument == string_to_sign
这给出了输出:
iF5JXP343nGyFhcagBhVDVDSnECQpHDMnuq%2F6ryFzBc%3D
iF5JXP343nGyFhcagBhVDVDSnECQpHDMnuq%2F6ryFzBc%3D
True
如果你想包含文字换行符;你可以在 bash 中使用 $''
,zsh:
$ python -c'import sys; print(sys.argv)' a $'b\nc\nd&e&f'
['-c', 'a', 'b\nc\nd&e&f']
如果您想要两个字符:反斜杠 + n
然后删除 $
:
$ python -c'import sys; print(sys.argv)' a 'b\nc\nd&e&f'
['-c', 'a', 'b\nc\nd&e&f']