我想将我的数据文件拖放到Python脚本上,让它处理文件并生成输出.Python脚本接受数据文件的名称作为命令行参数,但Windows资源管理器不允许脚本成为放置目标.
是否有某种配置需要在这个工作的某个地方完成?
我想获得键入的完整命令行.
这个:
" ".join(sys.argv[:])
在这里不起作用(删除双引号).此外,我不想重新加入被解析和拆分的东西.
有任何想法吗?
我在Python工作,想读取Unicode格式的用户输入(从命令行),即相当于Unicode的raw_input?
此外,我想测试Unicode字符串是否相等,看起来标准==不起作用.
我有兴趣尝试分布式版本控制系统.git听起来很有希望,但我在git的Windows端口看到了一条说"不要使用非ASCII文件名"的注释.我现在找不到,但有这个链接.它现在让我脱离git,但我不知道其他选项是否更好.
支持非ASCII文件名对我的日本公司至关重要.我正在寻找一个内部存储文件名为Unicode的文件,而不是依赖于平台的编码,这会导致无休止的悲伤.所以:
我以为我知道关于编码和Python的一切,但今天我遇到了一个奇怪的问题:虽然控制台设置为代码页850 - 并且Python正确报告 - 我在命令行上放置的参数似乎在代码页1252中编码如果我尝试用sys.stdin.encoding解码它们,我得到错误的结果.如果我假设'cp1252',忽略sys.stdout.encoding报告的内容,它就可以了.
我错过了什么,或者这是Python中的错误?Windows?注意:我在Windows 7 EN上运行Python 2.6.6,locale设置为French(瑞士).
在下面的测试程序中,我检查文字是否正确解释并可以打印 - 这是有效的.但是我在命令行上传递的所有值似乎都被错误地编码:
#!/usr/bin/python
# -*- encoding: utf-8 -*-
import sys
literal_mb = 'utf-8 literal: üèéÃÂç€ÈÚ'
literal_u = u'unicode literal: üèéÃÂç€ÈÚ'
print "Testing literals"
print literal_mb.decode('utf-8').encode(sys.stdout.encoding,'replace')
print literal_u.encode(sys.stdout.encoding,'replace')
print "Testing arguments ( stdin/out encodings:",sys.stdin.encoding,"/",sys.stdout.encoding,")"
for i in range(1,len(sys.argv)):
arg = sys.argv[i]
print "arg",i,":",arg
for ch in arg:
print " ",ch,"->",ord(ch),
if ord(ch)>=128 and sys.stdin.encoding == 'cp850':
print "<-",ch.decode('cp1252').encode(sys.stdout.encoding,'replace'),"[assuming input was actually cp1252 ]"
else:
print ""
Run Code Online (Sandbox Code Playgroud)
在新创建的控制台中,运行时
C:\dev>test-encoding.py abcé€
Run Code Online (Sandbox Code Playgroud)
我得到以下输出
Testing …Run Code Online (Sandbox Code Playgroud) 这是一个小程序:
import sys
f = sys.argv[1]
print type(f)
print u"f=%s" % (f)
Run Code Online (Sandbox Code Playgroud)
这是我运行的程序:
$ python x.py 'Recent/????? ???????.LNK'
<type 'str'>
Traceback (most recent call last):
File "x.py", line 5, in <module>
print u"f=%s" % (f)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 7: ordinal not in range(128)
$
Run Code Online (Sandbox Code Playgroud)
问题是sys.argv [1]认为它正在获得一个ascii字符串,它无法转换为Unicode.但我正在使用带有完全支持Unicode的终端的Mac,因此x.py实际上是获得了一个Unicode字符串.我怎么告诉Python sys.argv []是Unicode而不是Ascii?如果失败了,我如何将ASCII(其中包含unicode)转换为Unicode?明显的转换不起作用.