我有两个python脚本必须同时运行,因为它们互相交互。一个脚本是本地运行的“服务器”脚本,另一个脚本是通过套接字连接到它的客户端脚本。通常我只打开几个终端选项卡并在一个中运行服务器脚本,在另一个中运行客户端。在反复启动和停止每个脚本之后,我想创建一个bash别名,只用一个命令运行这两个脚本,并提出了这个:
gnome-terminal --tab -e "python server.py" --tab -e "python client.py"
但是,现在服务器脚本正在引发一个sqlite OperationalError,说我的一个数据表不存在。但是当我手动运行脚本时,一切正常。我不知道发生了什么,但我认为可能一起运行脚本并没有给服务器脚本足够的时间来初始化并建立与数据库的连接。所以我在客户端脚本中放了一个time.sleep(5),但是一旦启动我就会得到同样的错误。
任何人都知道可能会发生什么?或者有没有人知道用一个命令启动两个python脚本的任何替代方法?
答案 0 :(得分:0)
尝试将两个命令合并为一个:
gnome-terminal --tab -x bash -c "python server.py & sleep 5; python client.py"
我认为最好将sleep命令(如果需要)放在客户端之外,因为可能存在服务器已经启动且客户端不必睡眠的情况。
-x标志表示
-x, --execute
Execute the remainder of the command line inside the terminal.
该命令调用bash:
bash -c "python server.py & sleep 5; python client.py"
bash反过来,有一个-c标志,意思是
-c string If the -c option is present, then commands are read from string. If
there are arguments after the string, they are assigned to the posi‐
tional parameters, starting with $0.
您可能想要试验
gnome-terminal --tab -e "python server.py & sleep 5; python client.py"
这也可能有用。首先运行bash,然后读取〜/ .bashrc。如果不调用bash,我认为默认情况下会调用/ bin / sh。
如果你得到
"socket.error: [Errno 98] Address already in use",
这可能意味着您的服务器已经启动,并且第二次运行服务器失败。