我正在尝试从以下链接发送text2bin.py文件:
https://github.com/tensorflow/models/blob/master/swivel/text2bin.py
我必须修改一些代码,因为它是用python 2.7编写的,但我需要3+。 无论如何,我正在尝试代码并意识到sys.argv [1:]当前是空的。
import getopt
import os
import struct
import sys
try:
opts, args = getopt.getopt(sys.argv[1:], 'o:v:', ['output=', 'vocab='])
except getopt.GetoptError as e:
print (e, file = sys.stderr)
sys.exit(2)
以下是我整个模型的代码。
import getopt
import os
import struct
import sys
try:
opts, args = getopt.getopt(sys.argv[1:], 'o:v:', ['output=', 'vocab='])
except getopt.GetoptError as e:
print (e, file = sys.stderr)
sys.exit(2)
opt_output = 'vecs.bin'
opt_vocab = 'vocab.txt'
for o, a in opts:
if o in ('-o', '--output'):
opt_output = a
if o in ('-v', '--vocab'):
opt_vocab = a
def go(fhs):
fmt = None
with open(opt_vocab, 'w') as vocab_out:
with open(opt_output, 'wb') as vecs_out:
for lines in list(zip(fhs)):
parts = [str(line).split() for line in lines]
token = parts[0][0]
if any(part[0] != token for part in parts[1:]):
raise IOError('vector files must be aligned')
print(token, file = vocab_out)
vec = [sum(float(x) for x in xs) for xs in list(zip((parts)[1:]))]
if not fmt:
fmt = struct.Struct('%df' % len(vec))
vecs_out.write(fmt.pack())
if args:
fhs = [open(filename) for filename in args]
go(fhs)
for fh in fhs:
fh.close()
else:
go([sys.stdin])
为什么我得到一个空的sys.argv[1:]
?另外,我从python 2.7到3.5的转换是否正确??
答案 0 :(得分:0)
我不确定这是否得到了明确的回答,但听起来你无法成功传递参数。如果使用sys.argv,则从标准输入接收参数并将其传递给程序。我不熟悉Windows命令提示符,但在Linux中,通过使Python文件可执行然后执行来传递参数
./ text2bin.py parameter1 parameter2 ....(使用参数执行程序)
当你执行sys.argv [1:]时,你正在切掉第一个参数(sys.argv [0])并抓住你传递给标准输入的其余参数以及执行程序。