2010-09-24 90 views
1

我有兩個python腳本必須同時運行,因爲它們相互交互。一個腳本是在本地運行的「服務器」腳本,另一個腳本是通過套接字連接到它的客戶端腳本。通常情況下,我只需打開一對終端選項卡,然後在其中一個客戶端運行服務器腳本。開始,一遍又一遍停止每個腳本之後,我想作一個bash別名只用一個命令運行的腳本和與此想出了:同時加載兩個python腳本時出現SQLite錯誤

gnome-terminal --tab -e "python server.py" --tab -e "python client.py" 

不過,現在的服務器腳本是提高一個SQLite OperationalError說我的一個數據表不存在。但是當我手動運行腳本時,一切正常。我不知道發生了什麼,但我認爲可能一起運行腳本並沒有給服務器腳本足夠的時間來初始化並連接到數據庫。所以我在客戶端腳本中放了一個time.sleep(5),但是一旦啓動,我就會得到相同的錯誤。

任何人都有一個想法可能會發生什麼?或者是否有人知道用一個命令啓動兩個python腳本的替代方法?

回答

0

嘗試將兩個命令合二爲一:

gnome-terminal --tab -x bash -c "python server.py & sleep 5; python client.py" 

我認爲這是更好地把睡眠命令(如果需要)外的客戶,因爲可能存在的服務器已經啓動的情況下,客戶機將不必睡覺。


-x標誌意味着

-x, --execute 
     Execute the remainder of the command line inside the terminal. 

命令調用的bash:反過來

bash -c "python server.py & sleep 5; python client.py" 

慶典,有-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", 

這可能意味着你的服務器已經啓動,並運行第二次失敗的服務器。

+0

你想在睡眠中「睡5」,而不是「時5」。另外,您不想將此睡眠發送到背景。所以:'python server.py&sleep 5; python client.py' – eumiro 2010-09-24 11:14:43

+0

@eumiro:哎呀,謝謝。 – unutbu 2010-09-24 11:16:36

+0

我不明白爲什麼,但您的解決方案完美無缺! -x和-c選項有什麼作用?我在man page中看不到這些內容。 – pythonBOI 2010-09-24 11:28:37