Python 执行expect 命令不匹配引号问题:python -c 'os.system("expect -c ...")'

问题描述

python -c 'import os; os.system("/usr/bin/expect -c \'spawn ssh root@localhost; expect \"password:\" { send \"root\r\"}; interact\'")'

当我在 CLI 中执行上述命令时,我遇到了不匹配的引号问题(> 提示

但是在 python 脚本中执行它而不是在命令行中运行是可行的。此外,expect 脚本语法是正确的。

在这种情况下如何平衡/调整报价?我想了解这个技巧。 是否有任何在线验证检查工具,例如在线正则表达式解析器检查?

解决方法

首先,在shell中(我使用的是Bash),写一个正确的expect -c "..."

[STEP 101] # expect -c "spawn ssh foo@localhost date; expect \"assword:\" { send \"foobar\r\"}; expect eof"
spawn ssh foo@localhost date
foo@localhost's password:
Wed 13 Jan 2021 10:26:53 AM CST
[STEP 102] #

(这里我只使用双引号,这样在 python -c '...' 后面加上单引号会更容易。)

然后,编写一个 python -c 'print(...)' 来输出前一个 expect -c

[STEP 103] # python -c 'print("""expect -c "spawn ssh foo@localhost date; expect \\"assword:\\" { send \\"foobar\\r\\"}; expect eof" """)'
expect -c "spawn ssh foo@localhost date; expect \"assword:\" { send \"foobar\r\"}; expect eof"
[STEP 104] #

然后,将 print 替换为 os.system

[STEP 105] # python -c 'import os; os.system("""expect -c "spawn ssh foo@localhost date; expect \\"assword:\\" { send \\"foobar\\r\\"}; expect eof" """)'
spawn ssh foo@localhost date
foo@localhost's password:
Wed 13 Jan 2021 10:27:33 AM CST
[STEP 106] #