2016-07-13 37 views
1

我想用Maple調用一個C調用Python的共享庫。通常我需要在main中設置argc和argv,但由於這是調用共享庫的另一個程序(Maple),因此我沒有main函數(或者我應該有一個嗎?)。那麼我應該如何設置argc和argv?Argc和argv爲外部程序調用C共享庫

這是我得到的錯誤:

Traceback (most recent call last): 
    File "/home/shiningsun/maple/rhf.py", line 9, in function 
    mol.build() 
    File "/share/apps/pyscf/v11/pyscf/gto/mole.py", line 1638, in build 
    return self.build_(*args, **kwargs) 
    File "/share/apps/pyscf/v11/pyscf/gto/mole.py", line 1533, in build_ 
    _update_from_cmdargs_(self) 
    File "/share/apps/pyscf/v11/pyscf/gto/mole.py", line 2297, in _update_from_cmdargs_ 
    opts = cmd_args.cmd_args() 
    File "/share/apps/pyscf/v11/pyscf/gto/cmd_args.py", line 25, in cmd_args 
    (opts, args_left) = parser.parse_args() 
    File "/share/apps/anaconda2/lib/python2.7/optparse.py", line 1382, in parse_args 
    rargs = self._get_args(args) 
    File "/share/apps/anaconda2/lib/python2.7/optparse.py", line 1364, in _get_args 
    return sys.argv[1:] 
AttributeError: 'module' object has no attribute 'argv' 
+0

你想傳遞哪些參數? – tynn

+0

只需'argc'和'argv',因爲Python端需要這些才能運行。 – chemicaholic

+0

更多喜歡,你從哪裏得到這些?楓提供這些嗎?他們需要包含任何有意義的東西嗎? – tynn

回答

1

cmd_args模塊只解析verbosequietoutputmax-memory參數。假設只有output與您有關,您可以在Py_Initialize()之後用PySys_SetArgv設置值。

char **argv = {"", "-o", "path/to/output/file"}; 
PySys_SetArgv(3, argv); 
+0

其實我只是試着把隨機的東西分配給Python裏面的'sys.argv',它似乎工作。但有些東西我仍然不明白,例如我沒有任何命令行參數,因爲我在Maple端運行,並且想要在Maple中獲取輸出。那麼在這種情況下應該是'argv'。 – chemicaholic

+0

只讀回輸出文件。或者不要定義輸出文件並重定向'stdout'。 – tynn