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

问题描述 投票:-1回答:1

当我在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
python bash
1个回答
2
投票

你不能嵌套单引号。以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

© www.soinside.com 2019 - 2024. All rights reserved.