2016-07-13 12 views
1

Ich versuche, Maple zu verwenden, um eine freigegebene C-Bibliothek aufzurufen, die Python aufruft. Normalerweise muss ich argc und argv in main setzen, aber da dies ein anderes Programm (Maple) Aufruf der gemeinsam genutzten Bibliothek ist, habe ich nicht die main Funktion (oder sollte ich eine haben?). Dann, wie sollte ich die argc und argv einstellen?Argc und argv für externes Programm aufrufen C shared library

Dies ist der Fehler, den ich habe:

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

Welche Argumente möchten Sie weitergeben? – tynn

+0

Nur 'argc' und' argv', da die Python-Seite diese benötigt. – chemicaholic

+0

Mehr wie, woher bekommst du diese? Stellt Maple diese zur Verfügung? Müssen sie etwas Bedeutungsvolles enthalten? – tynn

Antwort

1

Das cmd_args Modul parst nur verbose, quiet, output und max-memory Argumente. Angenommen, nur output ist für Sie relevant, können Sie die Werte mit PySys_SetArgv direkt nach Py_Initialize() setzen.

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

Eigentlich habe ich gerade versucht, etwas 'sys.argv' innerhalb von Python zufällig zuzuweisen und es scheint zu funktionieren. Aber da ist etwas, das ich immer noch nicht verstehe, zum Beispiel habe ich keine Befehlszeilenargumente, weil ich auf dem Maple-Ende laufe und die Ausgabe auch in Maple bekommen möchte. Was soll dann in diesem Fall der "argv" sein? – chemicaholic

+0

Lesen Sie einfach die Ausgabedatei zurück. Oder definieren Sie keine Ausgabedatei und leiten Sie den 'stdout' um. – tynn