Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将参数复制到列表中_Python - Fatal编程技术网

Python 将参数复制到列表中

Python 将参数复制到列表中,python,Python,我试图将传递到python脚本中的参数复制到文件中。以下是参数 ["0013","1","1","\"john.dow@gmail.com\"","1","P123-ND 10Q","10Q H??C"] 我知道存在缓冲区问题,我正在将坏数据放入参数中。但是,我无法控制传入的内容。我试图从第5个参数开始,将参数复制到一个文件中

我试图将传递到python脚本中的参数复制到文件中。以下是参数

["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个)。