我正在編寫一個python腳本來運行一個已編譯的二進制文件,其源代碼是用C++編寫的,使用命令行參數控制參數的變化。使用命令行參數設置#define標識
例如os.system("./my_program " + my_arg)
假設從main()
改變這個參數太麻煩了。
相反,我想將其設置在使用一些包含的頭文件 #define MY_PARAM my_val
在程序運行時,其中my_val
被作爲一個命令行參數。
我正在使用gcc編譯
任何想法?根據您的代碼段
我正在編寫一個python腳本來運行一個已編譯的二進制文件,其源代碼是用C++編寫的,使用命令行參數控制參數的變化。使用命令行參數設置#define標識
例如os.system("./my_program " + my_arg)
假設從main()
改變這個參數太麻煩了。
相反,我想將其設置在使用一些包含的頭文件 #define MY_PARAM my_val
在程序運行時,其中my_val
被作爲一個命令行參數。
我正在使用gcc編譯
任何想法?根據您的代碼段
愚蠢的問題。我想我沒有正確理解問題之前我試圖解決的問題!我過去的這個問題是:
使用-D選項來設置這些編譯時變量在Makefile中添加可選的參數。這將使用運行make
時給出的值替換指定的變量名稱。
Python腳本通過一堆選項循環,每次調用os.system("make OPT1=" + str(opt1) + "OPT2=" + str(opt2))
等隨後使用os.system(「./ MYPROG |三通mylogfile.log」)
- Python腳本然後解析日誌文件,其中包含的輸出隨作爲make
參數輸入的選項而變化。
希望這有助於任何人想要做類似的事情。
:
os.system("./my_program " + my_arg)
你只是想以一個參數輸入發送到你的程序。您不需要使用預處理器定義(例如#define SOMETHING
)。 (事實上,你不能,因爲二進制文件已經被編譯。)
相反,你修改main
函數從int main()
到int main(int argc, char *argv[])
。
你會用它類似於什麼是下面的方式:
➜ /tmp g++ test.cpp -o argtest
➜ /tmp ./argtest
Argument 0: ./argtest
➜ /tmp ./argtest a b c d e 123
Argument 0: ./argtest
Argument 1: a
Argument 2: b
Argument 3: c
Argument 4: d
Argument 5: e
Argument 6: 123
➜ /tmp python3
Python 3.4.3+ (default, Oct 14 2015, 16:03:50)
[GCC 5.2.1 20151010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from os import system
>>> system('./argtest a b c 123')
Argument 0: ./argtest
Argument 1: a
Argument 2: b
Argument 3: c
Argument 4: 123
0
>>>
:
#include <iostream>
int main(int argc, char *argv[]) {
for(int i = 0; i < argc; ++i)
std::cout << "Argument " << i << ": " << argv[i] << std::endl;
return 0;
}
樣品從上面的代碼,它被放置在test.cpp
文件,並使用來自Python3交互式解釋運行
最後的零是來自Python的system
調用的返回碼,表示一切正常。
您的應用程序將不得不知道讀取您的配置文件。你的應用程序中是否有這樣的東西? –
「運行C++程序的python腳本」你的意思是編譯後的二進制文件的源代碼是用C++編寫的嗎?或者這個腳本將採用C++源代碼編譯並執行它? –
您是否針對特定的操作系統? – Bathsheba