问题描述
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] #