我正在为一个远程系统开发一个 python 应用程序,该系统有一个通过串行端口连接的设备。
目前我的工作流程如下
- 本地编写代码
- 提交到 git
- git push
- 切换到持有 ssh 会话的终端窗口
- git pull
- 运行 Python 代码
这有点尴尬,我想使用一些脚本来加快速度并提高工作效率
我写了两个脚本,一个用于本地,一个用于远程
我的本地脚本如下所示
#!/bin/bash
# do git commit
if [ "$#" -eq 3 ]
then
if [ "$1" == "-m" ]
then
git commit -am "$2"
else
echo "syntax error, -m expected as argument 1"
exit
fi
else
git commit -am "execute.sh script"
fi
# do git push
git push
# login to ssh and execute script
ssh <user>@<ip> 'bash -s' < remote-execute.sh
我的remote-execute.sh
样子
#!/bin/bash
# cd
cd <dir>
# do git pull
git pull
# run python
python3 main.py
我的 Python 代码使用 Python Curses (ncurses) 进行 GUI 交互
当我运行这些脚本时,我遇到错误
Traceback (most recent call last):
File "Monitor.py", line 1140, in <module>
curses.wrapper(main)
File "/usr/lib/python3.5/curses/__init__.py", line 73, in wrapper
stdscr = initscr()
File "/usr/lib/python3.5/curses/__init__.py", line 30, in initscr
fd=_sys.__stdout__.fileno())
_curses.error: setupterm: could not find terminal
这一定是因为我使用带有“-s”开关的 ssh 来执行远程脚本。
有办法解决这个问题吗?好像有些终端内容没有被正确转发?我不能再多说什么了,因为这有点超出我的知识范围。
答案1
-t
ssh 客户端在“批处理”模式下运行时不会分配终端(使用提供的命令)。如果您要求它运行交互式应用程序,则需要使用该选项来启用此功能。
此外,在尝试运行交互式程序时,重定向标准输入毫无意义——尽管你可以力量tty 分配(使用 -tt),您的程序只会尝试从 .sh 文件而不是键盘读取输入。
ssh -t <user>@<ip> "cd <dir> && git pull --ff-only && python3 main.py"
ssh -t <user>@<ip> "$(cat remote-commands.txt)"