Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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脚本,如下所示: python gp.py /home/cdn/test.in.......... 在脚本中,我需要获取输入文件的路径test.in,脚本应该从文件内容中读取和打印。这是工作正常的代码。但文件路径是用脚本硬编码的。现在我想将路径作为命令行参数调用 工作脚本 脚本不工作 在这方面我需要做什么更改?查看文件输入模块:它将命令行参数解释为文件名,并在一个步骤中将结果数据交给您 例如: import fileinput for line in filein

我在提示符下运行python脚本,如下所示:

python gp.py /home/cdn/test.in..........
在脚本中,我需要获取输入文件的路径
test.in
,脚本应该从文件内容中读取和打印。这是工作正常的代码。但文件路径是用脚本硬编码的。现在我想将路径作为命令行参数调用

工作脚本 脚本不工作
在这方面我需要做什么更改?

查看
文件输入模块:它将命令行参数解释为文件名,并在一个步骤中将结果数据交给您

例如:

import fileinput
for line in fileinput.input():
    print line

查看
fileinput
模块:它将命令行参数解释为文件名,并在一个步骤中将结果数据交给您

例如:

import fileinput
for line in fileinput.input():
    print line

虽然Brandon的答案是一个有用的解决方案,但代码不起作用的原因也值得解释

简而言之,字符串列表不是文件对象。在第一个脚本中,您打开一个文件并对该对象(即文件对象)进行操作。但是写
['foo','bar'].read()
没有任何意义——列表不能
read()
读取,字符串也不能--
'foo'。read()
显然是胡说八道。这类似于在第一个脚本中编写
inputfile.read()

为了明确起见,下面是一个从命令行上指定的所有文件获取所有内容的示例。这不使用
fileinput
,因此您可以准确地看到实际发生的情况

# iterate over the filenames passed on the commandline
for filename in sys.argv[1:]:
    # open the file, assigning the file-object to the variable 'f'
    with open(filename, 'r') as f:
        # print the content of this file.
        print f.read()

# Done.

虽然Brandon的答案是一个有用的解决方案,但代码不起作用的原因也值得解释

简而言之,字符串列表不是文件对象。在第一个脚本中,您打开一个文件并对该对象(即文件对象)进行操作。但是写
['foo','bar'].read()
没有任何意义——列表不能
read()
读取,字符串也不能--
'foo'。read()
显然是胡说八道。这类似于在第一个脚本中编写
inputfile.read()

为了明确起见,下面是一个从命令行上指定的所有文件获取所有内容的示例。这不使用
fileinput
,因此您可以准确地看到实际发生的情况

# iterate over the filenames passed on the commandline
for filename in sys.argv[1:]:
    # open the file, assigning the file-object to the variable 'f'
    with open(filename, 'r') as f:
        # print the content of this file.
        print f.read()

# Done.

在不适合您的脚本中,您只是没有在读取文件之前打开它。所以把它改成

          #!/usr/bin/python

          import sys

          print "\n".join(sys.argv[1:])
          f = open(argv[1:], "r")
          data = f.read()

          print data
          f.close()
另外,
f.close()
这将出错,因为尚未定义
f
。不过,上面的更改可以解决这个问题


顺便说一句,根据编码标准,您应该使用至少3个字符长的变量名。

在不适合您的脚本中,您只是没有在读取文件之前打开它。所以把它改成

          #!/usr/bin/python

          import sys

          print "\n".join(sys.argv[1:])
          f = open(argv[1:], "r")
          data = f.read()

          print data
          f.close()
另外,
f.close()
这将出错,因为尚未定义
f
。不过,上面的更改可以解决这个问题


顺便说一句,根据编码标准,您应该使用至少3个字符长的变量名。

请检查此相关问题。在您的非工作脚本中,这是做什么的
argv[1:].read()
?argv是一个字符串列表,对吗?我认为它必须是
data=open(sys.argv[1],“r”).read()
。检查此相关问题。在您的非工作脚本中,这是做什么的
argv[1:].read()
?argv是一个字符串列表,对吗?我想它必须是
data=open(sys.argv[1],“r”).read()
。回答得好,我向你的冷静致敬。我正在努力冷静地解释那些我很清楚但别人不清楚的事情+回答得好,我向你的平静致敬。我正在努力冷静地解释那些我很清楚但别人不清楚的事情+布兰登、奥涅西姆森伯恩和坎普。它奏效了…非常感谢。Thx Brandon,OnesimusUnbound和Kampu。它成功了…非常感谢。