【问题标题】:Argc and argv for external program calling C shared library外部程序调用 C 共享库的 argc 和 argv
【发布时间】:2016-07-13 21:37:52
【问题描述】:

我正在尝试使用 Maple 调用调用 Python 的 C 共享库。通常我需要在main 中设置argc 和argv,但由于这是另一个调用共享库的程序(Maple),我没有main 函数(或者我应该有一个吗?)。那我应该如何设置argc和argv呢?

这是我得到的错误:

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'

【问题讨论】:

  • 你要传递哪些参数?
  • 只需 argcargv,因为 Python 端需要这些才能运行。
  • 更像,你从哪里得到这些? Maple 提供这些吗?他们需要包含任何有意义的东西吗?

标签: shared-libraries argv python-c-api maple


【解决方案1】:

cmd_args 模块仅解析 verbosequietoutputmax-memory 参数。假设只有output 与您相关,您可以在Py_Initialize() 之后使用PySys_SetArgv 设置值。

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

【讨论】:

  • 实际上我只是尝试在 Python 中为sys.argv 随机分配一些东西,它似乎可以工作。但是有些东西我还是不明白,例如我没有任何命令行参数,因为我在 Maple 端运行并且想在 Maple 中也得到输出。那么在这种情况下,argv 应该是什么。
  • 只读回输出文件。或者不定义输出文件并重定向stdout
猜你喜欢
  • 2020-06-26
  • 2013-03-02
  • 2012-08-16
  • 2020-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多