如何告诉python在将命令传递给bash时忽略一个字符(Python到bash命令SyntaxError:因为{而无效的语法)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何告诉python在将命令传递给bash时忽略一个字符(Python到bash命令SyntaxError:因为{而无效的语法)相关的知识,希望对你有一定的参考价值。

当我在bash脚本中运行相同的命令时,它可以工作。当我想通过Python的os.system将它传递给shell时,它会因为{和:字符而抱怨。

import os
os.system('composer transaction submit -c admin@tutorial-network -d '{"$class": "org.acme.frame.auction.SetupDemo1"}'')


Shell Error:
os.system('composer transaction submit -c admin@tutorial-network -d '{"$class": "org.acme.frame.auction.SetupDemo1"}'')
                                                                         ^
SyntaxError: invalid syntax
答案

你不能嵌套单引号。以os.system('开头的字符串在下一个(未转义的)单引号结束。

Python提供三重引号,提供一个简单的修复:

os.system(r"""composer transaction submit -c admin@tutorial-network -d '{"$class": "org.acme.frame.auction.SetupDemo1"}'""")

一个更好的解决方案是使用没有subprocess.runshell=True,所以你不必理解Python和shell的引用机制。

subprocess.run([
        'composer', 'transaction',
        'submit', '-c', 'admin@tutorial-network',
        '-d', '{"$class": "org.acme.frame.auction.SetupDemo1"}'],
    # probably a good idea
    check=True)

关于这个主题的更多信息,请参阅https://stackoverflow.com/a/51950538/874188

以上是关于如何告诉python在将命令传递给bash时忽略一个字符(Python到bash命令SyntaxError:因为{而无效的语法)的主要内容,如果未能解决你的问题,请参考以下文章

通过回声管道将python变量(字符串)传递给bash命令[重复]

如何告诉 tesseract 不要忽略单词之间的空格?

如何在Python中将变量传递给bash命令

是否可以告诉 Scintilla 忽略某些击键并将它们传递给父窗口?

将bash变量传递给python命令[关闭]

如何将 Bash 变量传递给 Python?