Python 将参数复制到列表中
我试图将传递到python脚本中的参数复制到文件中。以下是参数Python 将参数复制到列表中,python,Python,我试图将传递到python脚本中的参数复制到文件中。以下是参数 ["0013","1","1","\"john.dow@gmail.com\"","1","P123-ND 10Q","10Q H??C"] 我知道存在缓冲区问题,我正在将坏数据放入参数中。但是,我无法控制传入的内容。我试图从第5个参数开始,将参数复制到一个文件中
["0013","1","1","\"john.dow@gmail.com\"","1","P123-ND 10Q","10Q H??C"]
我知道存在缓冲区问题,我正在将坏数据放入参数中。但是,我无法控制传入的内容。我试图从第5个参数开始,将参数复制到一个文件中
f = open(in_file_name, 'w')
for x in range(5, len(arg_list)):
f.write(arg_list[x] + '\n')
f.close()
该文件的结果如下:
P123-ND 10Q
10Q H??C
以下是它应该是什么:
P123-ND
10Q
我怎样才能不包含坏数据?有效信息和错误信息之间的空格发生了什么变化
根据要求,以下是完整的程序:
#!/bin/python
class Argument_Indices:
PRINTER_INDEX = 0
AREA_INDEX = 1
LABEL_INDEX = 2
EMAIL_INDEX = 3
RUN_TYPE_INDEX = 4
import argparse
import json
import os
from subprocess import call
import sys
from time import strftime
def _handle_args():
''' Setup and run argpars '''
parser = argparse.ArgumentParser(description='Set environment variables for and to call Program')
parser.add_argument('time_to_run', default='NOW', choices=['NOW', 'EOP'], help='when to run the report')
parser.add_argument('arguments', nargs='+', help='the remaining command line arguments')
return parser.parse_args()
def _proces_program(arg_list):
time_stamp = strftime("%d_%b_%Y_%H_%M_%S")
printer = arg_list[Argument_Indices.PRINTER_INDEX]
area = arg_list[Argument_Indices.AREA_INDEX]
label = arg_list[Argument_Indices.LABEL_INDEX]
in_file_name = "/tmp/program{0}.inp".format(time_stamp)
os.environ['INPUT_FILE'] = in_file_name
f = open(in_file_name, 'w')
for x in range(5, len(arg_list)):
f.write(arg_list[x])
f.close()
call(['./Program.bin', printer, area, label])
os.remove(in_file_name)
def main():
''' Main Function '''
arg_list = None
args = _handle_args()
if len(args.arguments) < 1:
print('Missing name of input file')
return -1
with open(args.arguments[0]) as input_file:
arg_list = json.load(input_file)
_process_program(arg_list)
return 0
if __name__ == '__main__':
if main() != 0:
print('Program run failed')
sys.exit()
#/bin/python
类参数索引:
打印机索引=0
面积指数=1
标签索引=2
电子邮件索引=3
运行类型索引=4
导入argparse
导入json
导入操作系统
从子流程导入调用
导入系统
从时间导入strftime
def_handle_args():
''设置并运行argpars''
parser=argparse.ArgumentParser(description='Set environment variables for and to call Program')
parser.add_参数('time_to_run',default='NOW',choices=['NOW',EOP'],help='何时运行报告')
add_参数('arguments',nargs='+',help='剩余的命令行参数')
返回parser.parse_args()
定义过程程序(参数列表):
时间戳=strftime(“%d\u%b\u%Y\u%H\u%M\u%S”)
打印机=参数列表[参数索引.打印机索引]
区域=参数列表[参数索引.区域索引]
label=arg\u列表[参数索引.标签索引]
格式(时间戳)
os.environ['INPUT_FILE']=in_FILE_name
f=打开(在文件名“w”中)
对于范围内的x(5,len(arg_列表)):
f、 写入(参数列表[x])
f、 关闭()
调用(['./Program.bin',打印机,区域,标签])
删除操作系统(在文件名中)
def main():
“主要功能”
arg_list=None
args=_handle_args()
如果len(参数参数)<1:
打印('缺少输入文件的名称')
返回-1
将open(args.arguments[0])作为输入文件:
arg_list=json.load(输入_文件)
_处理程序(参数列表)
返回0
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
如果main()!=0:
打印('程序运行失败')
sys.exit()
对于您的具体情况(接收到的重复参数之间有一些空格),这将起作用:
received_param_list = ["0013","1","1","\"john.dow@gmail.com\"","1","P123-ND 10Q","10Q H??C"]
arg_list = [i.split(" ")[0] for i in received_param_list]
last_param = received_param_list[-1].split()[-1]
if last_param != arg_list[-1]:
arg_list.append(last_param)
for x in range(5, len(arg_list)):
print (arg_list[x])
虽然可能还有另一种更简单的方法你说你想从5号开始,但你似乎只想要5号?您能确认吗?关于
(arg_list[x].split())[0]
?请复制您的“完整”(只是有趣的)可运行代码,以便我们在计算机上进行检查。您的参数是否仅因空格而“错误”?它们错误是因为创建参数的程序存在缓冲区溢出问题。空间是预期的(始终有48个)。