繁体   English   中英

要在 Python 中的终端中作为命令传递的字符串 concat

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM