[英]String concat to be passed as a command in terminal in Python
我正在尝试通过在 python 中传递命令将文件上传到 Azure 云,然后在终端内执行它。
标准语法是
azcopy cp "path\to\file\filename.txt" "https://[azure_blob_url]"
我正在使用的代码是,
p1 = subprocess.run(
'azcopy cp "Desktop/pywatchdog/{}"'.format(
os.path.basename(event.src_path) + " " + '"https://[azure_blob_url]"'
),
shell=True,
)
我尝试了几种方法,但我无法通过正确的 concat 使命令在语法上正确。
请问有什么想法吗?
双引号保护文件名免受几个 shell 扩展机制的影响,但仍然不会禁用美元符号或反引号的插值,并且如果文件名包含文字双引号字符,则会以特殊方式中断。 您可以使用shlex.quote()
,但更好的解决方案是根本不涉及 shell。
p1 = subprocess.run([
'azcopy', 'cp', "Desktop/pywatchdog/{}".format(
os.path.basename(event.src_path)),
'https://[azure_blob_url]'],
shell=False
)
这也巧合地修复了您尝试中放错位置的括号。
shell=False
在这里不是绝对必要的,因为它是默认值。 注意subprocess.run()
的第一个参数现在是一个字符串列表,而不是单个字符串。 另请参见子进程中“shell = True”的实际含义
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.