簡體   English   中英

無法使用exec執行簡單的Shell腳本/命令

[英]Can't execute simple Shell Script/Commonads with exec

我用Qt5設計了一個GUI,單擊一個按鈕就想啟動一個python軟件。 最初,它嘗試編寫一個簡單的shell腳本,如下所示:

#!/bin/bash
cd ~/Printrun
python pronterface.py

直接在外殼中執行時,腳本運行良好,但是現在我想要一個執行腳本的C ++代碼。 我已經在這里找到了一些有用的東西,但是我似乎無法在我的項目中使用它。 也許是因為我正在從Qt運行代碼?

這是代碼:

execlp("home/user/", "./my_shell_script.sh", (char *)0);

execlp("home/user/Printrun", "python pronterface.py", (char *)0);

兩者都不返回任何錯誤,但似乎不起作用。

很抱歉,如果我缺少明顯的新東西,例如這樣的東西。

編輯:我也嘗試了system()沒有成功,我讀到exec是一個更干凈的解決方案

您誤解了execlp()的規范。 第一個參數,有時被記錄為path (但對於不同的exec函數,更常見),應該是一直到可執行文件的路徑,而不是在包含可執行文件的目錄中停下來。 然后,變量自變量指定將作為進程的argv向量提供的所有元素,包括第0 ,該一個通常按名稱命名正在執行的程序。 從而:

execlp("home/user/my_shell_script.sh", "my_shell_script.sh", (char *)0);

但是請注意,當您提供的路徑包含任何斜杠字符時,就像您一樣, execlp()在功能上等效於execl()

此外,您的python示例(至少)似乎錯誤地假定第一個參數給出了該進程的初始工作目錄 如果要更改工作目錄,則必須手動進行。 例如,

chdir("home/user/Printrun");
execlp("python", "pronterface.py", (char *)0);

此外,請確保檢查函數返回值是否有錯誤,並進行適當的處​​理(以上未進行說明),盡管在exec系列函數的情況下,完全返回則表示錯誤。

鑒於此,您應該認識到,如果在GUI小部件的處理函數中使用此函數,則可能會出現問題。 在這種情況下,您很可能希望先fork() ,以便新進程與GUI一起運行而不是替換它,或者改用system()處理所有派生,執行和等待您的操作。 還要注意,與exec函數不同, system()通過外殼運行命令。 例如,然后:

system("cd ~/Printrun; python pronterface.py");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM