0

好的,我找到了三个类似的线程,但它们都处理 C# 中的命令行参数。我的问题是,如何将命令行参数从 cmd 窗口读入 IronPython?

我在这些文档中阅读第 2.1.1 节的方式应该与 CPython 相同——只需导入sys模块并从sys.argv数组中获取值。它没有。这是我尝试过的测试代码(文件 z.py):

import sys
print sys.argv[0]
print sys.argv[1]

当我将其称为z.py testing使用 CPython (2.7.4) 解释器时,我得到了您所期望的:

E:\>c:\python27\python.exe z.py testing
z.py
testing

E:\>

但是当我使用 IronPython (2.7.3) 解释器调用它时,我得到:

Traceback (most recent call last):
  File "E:\z.py", line 3, in <module>
IndexError: index out of range: 1

如果我注释掉第 3 行并使用 IronPython 重试,它运行良好:

E:\>z.py testing
E:\z.py

E:\>

所以sys.argv[0]被分配了,但就是这样——命令行参数永远不会作为附加元素出现在sys.argv.

因此,要么我缺少一些额外的步骤,要么sys.argv在 IronPython 中不能用于此目的。无论哪种方式,我如何让模块识别参数?

4

1 回答 1

1

问题是 IronPython 安装没有正确注册 python 解释器。它只是将第一个参数(即脚本名称)传递给 IronPython 解释器,而忽略了其余的参数。也就是说:它使用而不是注册*.py文件。...\ipy.exe %1...\ipy.exe %*

解决方案是直接使用解释器运行脚本 - 就像使用 python.exe 一样:

E:\>c:\path\to\ipy64.exe z.py testing

不是

E:\>z.py testing

我认为这应该报告为 IronPython 安装上的错误。

于 2013-09-17T23:58:13.877 回答