似乎我不能使用撇号,命令失败,没有提示性错误。 我正在尝试执行以下操作:
secretLsCmd = subprocess.Popen(('docker', 'secret', 'ls') , stdout=subprocess.PIPE)
oneWhitespaceCmd = subprocess.Popen(('tr', '-s','" "') , stdout=subprocess.PIPE, stdin=secretLsCmd.stdout)
onlySecretsCmd = subprocess.check_output(('cut', "-d' '", '-f2') , stdin=oneWhitespaceCmd.stdout)
在普通Linux终端中,它将执行以下命令:
^{pr2}$在CLI中运行这个命令可以正常工作,但是一旦我把它放到python中,它就不能工作了。管道中的前两个命令工作正常(我检查过了),最后一个命令不工作,退出时出现错误代码1。。。我几乎百分之百地肯定是-d'',但我该怎么解决呢?有什么想法吗?在
这条线:
正在运行:
^{pr2}$因此,您希望丢失额外的双引号:Python将引用它需要为shell引用的任何参数。在
此命令:
相当于shell命令:
因此,您可能只想丢失空白处的引号:
让Python在需要的地方插入引号。这将实际运行(应该与您想要的相同,但不完全相同):
我使用
shlex.quote()
创建了一个与您正在运行的命令等价的shell,但是在实践中,除非您告诉subprocess
调用shell,否则它将执行bash解析所有转义引号后执行的命令的等效命令。所以在内部,转义并没有发生,但也不需要引用来区分参数。在相关问题 更多 >
编程相关推荐