【问题标题】:Pass a file as an argument in Linux在 Linux 中将文件作为参数传递
【发布时间】:2014-02-19 00:03:55
【问题描述】:

我有一个 python 脚本,它通过 sys.argv 将文件作为参数。

在 Linux 中将此文件作为参数传递的最佳方式是什么?

我尝试在我的 python 脚本的第一行添加这行代码,认为这可以让我将文件拖放到上面,但这似乎不起作用。

#!/usr/bin/env python

我有什么遗漏吗?干杯

【问题讨论】:

  • 嗯,你试过在终端输入python script.py filename吗?
  • 您是否使脚本可执行?
  • 二进制路径是否存在? (因为它有一个空格)
  • stackoverflow.com/questions/19978540/… 建议这取决于您的桌面环境。 (“最好”的方式可能是 mu 的建议,虽然这并没有解决拖放问题......)
  • 谢谢mu...这正在工作...(掌心)。那么这行代码有必要吗? (#!/usr/bin/env python) 它是干什么用的?

标签: python linux


【解决方案1】:

这是一个非常基本的示例,它采用第一个参数 (sys.argv[1]),我们假设它是一个文件名,打开它并打印所有行。

import sys

f = open(sys.argv[1])
lines = f.readlines()

for line in lines:
    print line

f.close() 

你可以通过输入 python 调用这个文件

<source_file.py> <filename>

如果我的源文件名为 readMyFile.py 并且我想读取 myFile.txt,我会键入

python readMyFile.py myFile.txt

python system

至于完成拖放,您总是可以将 Python 调用放入 bash 脚本中,然后将参数从 bash 脚本传递给 python 脚本。看看this stack overflow thread 关于这个。本质上,您只需制作一个包含此代码的 bash 脚本。

#!/bin/bash
python <source_file.py> "$1"

或者在我的具体例子中......

#!/bin/bash
python readMyFile.py "$1"

看起来您可能必须在 .desktop 文件中附带一些上述语法和一些代码。看看这个askubuntu链接

【讨论】:

    【解决方案2】:

    尝试使用python script.py filename

    #!/usr/bin/env python 线是 shebang 线。

    如果您将脚本设为可执行文件(即,使用 chmod 将其文件权限更改为可执行文件),则 shebang 有助于识别脚本类型。

    另一种方法是直接使用python 二进制文件的路径,如#!/usr/bin/python,但不同机器上的路径可能不同,因此我们通常从env 获取二进制文件的路径。

    如果您每次都可以使用python script.py 运行脚本,则通常不需要shebang,但如果在其他地方引用了该脚本,则可能会导致问题。我在我的所有脚本中添加了一个 shebang,只是为了确定它来自我的编辑器中的哪个脚本。

    请注意,扩展名.py 完全是可选的,为了通用性,您可能希望在更大的项目中运行./script 来完成任务;这种模块化确保可执行脚本可以使用 python、bash 或任何其他脚本语言,只要它执行它应该执行的操作。

    不,您不能拖放文件并将其作为参数传递给 python 脚本,即使它是可执行文件。

    【讨论】:

    • 谢谢...所以如果我使脚本可执行,我应该能够将文件拖到上面吗?还是不行?
    • 不,你不能这样做。
    猜你喜欢
    • 1970-01-01
    • 2014-03-23
    • 2011-07-06
    • 2020-01-19
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2013-02-26
    相关资源
    最近更新 更多