我有以下名为test.py
的Python脚本。目标是让Python识别标签。我该怎么做?
import sys
input = sys.argv[1]
if __name__ == "__main__":
print input == "\t"
当我将python test.py "\t"
传递给命令行时,为什么我会获得False
?
[更新]
我根据以下前两条评论更改了代码:
import sys
someArgs = sys.argv[1]
if __name__ == "__main__":
print someArgs
print someArgs == '\t'
当我通过python test.py '\t'
时,我得到了
\t
False
[更新2]
不幸的是,我使用的是Windows命令提示符,而不是* nix系统。
[快速&肮脏的解决方案]
当"\t"
作为参数在命令行中传递时,我可以尝试将其检测为"\\t"
并手动将其分配给Python中的选项卡。例如,
import sys
someArgs = sys.argv[1]
if __name__ == "__main__":
if someArgs == "\\t":
pythonTab = "\t"
print pythonTab
从命令行,python test.py "\t"
将生成一个选项卡作为输出。任何人都有更优雅的解决方案吗?
答案 0 :(得分:3)
反斜杠在Python和命令行中都有特殊含义。
您想要检测单个制表符吗?然后你正确地比较它:input == "\t"
是正确的。但它依赖于系统来传递命令行中的制表符。我不知道如何在Windows上执行此操作。在使用Bash的Unix上,命令行应如下所示:
python test.py $'\t'
或
python test.py $'\011'
在此处查看有关Bash中$'
语法的详细信息:http://www.gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting
你想检测两个字符:反斜杠和t?然后,您应将其比较为:input == "\\t"
或input == r"\t"
。我不知道如何在Windows上的命令行中传递反斜杠。在使用Bash的Unix上,命令行应如下所示:
python test.py '\t'
在此处查看有关Bash中'
语法的详细信息:http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes
我建议将以下调试信息生成添加到您的程序中:
print repr(argv[1])
print argv[1].encode('hex')
答案 1 :(得分:0)
这里有两个问题。
首先,\t
仅在Python脚本中起作用 - 您需要命令行中的文字制表符。
其次是how to enter a literal tab on the command line
您输入command $'\t'
所以试试这个:
#!/usr/bin/python
import sys
in_part = sys.argv[1]
if __name__ == "__main__":
print 'cmd[1]={}'.format(in_part)
print in_part == "\t"
对于命令行:
tab.py $'\t'
答案 2 :(得分:-1)
如果你确定你的论点总是被引用," \ t"你可以使用:
ast.literal_eval(in_part)