Python 3.x gsutil在subprocess.Popen中出现语法错误

Python 3.x gsutil在subprocess.Popen中出现语法错误,python-3.x,subprocess,gsutil,google-cloud-sdk,Python 3.x,Subprocess,Gsutil,Google Cloud Sdk,在我的情况下,我想上传所有的pdf文件到谷歌云存储 因此,我将google sdk与pytho子流程一起用于实践,而不是“google.cloud.storageAPI” 但下面有一个错误: 代码: from subprocess import Popen def subprocess_cmd(command): print(f'$>: {command}') process = Popen(command, stdout=subp

在我的情况下,我想上传所有的pdf文件到谷歌云存储

因此,我将google sdk与pytho子流程一起用于实践,而不是“google.cloud.storageAPI”

但下面有一个错误:

代码:

from subprocess import Popen

def subprocess_cmd(command):
    print(f'$>: {command}')
    process = Popen(command,
                    stdout=subprocess.PIPE,
                    executable='/bin/bash',
                    shell=True)

    proc_stdout = process.communicate()[0].strip()
    print(proc_stdout.decode("utf-8"))
执行功能

command = "gsutil -m cp -r ./source/*(.pdf|.PDF) gs://<bucket_name>"
subprocess_cmd(command)
/bin/bash: -c: line 0: syntax error near unexpected token `('
/bin/bash: -c: line 0: `gsutil -m cp -r ./source/*(.pdf|.PDF) gs://<bucket_name>'
command=“gsutil-mcp-r./source/*(.pdf |.pdf)gs://”
子进程_cmd(命令)
错误

command = "gsutil -m cp -r ./source/*(.pdf|.PDF) gs://<bucket_name>"
subprocess_cmd(command)
/bin/bash: -c: line 0: syntax error near unexpected token `('
/bin/bash: -c: line 0: `gsutil -m cp -r ./source/*(.pdf|.PDF) gs://<bucket_name>'
/bin/bash:-c:第0行:意外标记“(”附近的语法错误
/bin/bash:-c:第0行:`gsutil-mcp-r./source/*(.pdf |.pdf)gs://'

您应该改用这一行:

command = "gsutil -m cp -r ./source/{*.pdf,*.PDF} gs://<bucket_name>"
command=“gsutil-mcp-r./source/{*.pdf,*.pdf}gs://”

请参阅关于
bash
通配符中的
{}(花括号)
部分。您还可以查看关于
gsutil
通配符。

无法使用
/*(.pdf |.pdf)运行命令
,该命令将无法正常工作。我已尝试在我的一侧复制它,但我无法使用它。考虑到这一点,将GCS与Python一起使用的受支持方式是使用Google Cloud Client Library for Python,而不是运行gsutil。请您澄清为什么不使用它?但是
gsutil-m cp-r./source/*(.pdf |.pdf)gs://
是在TerminalHi@EEEEH上工作的。它可能工作,但不受支持-可能是因为
gsutil
基于Unix环境-可能工作不正常。除此之外,请您澄清为什么不使用Google Cloud Client Library for Python而不是Python子进程?嗨@gso_gabriel,我没有使用客户端库,因为我只想知道子流程。