如何告诉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.run
的shell=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命令[重复]