如何在 Linux 终端上运行带有输入的 python 代码? [复制]

Posted

技术标签:

【中文标题】如何在 Linux 终端上运行带有输入的 python 代码? [复制]【英文标题】:How can I run a python code with input on Linux terminal? [duplicate] 【发布时间】:2020-01-08 14:03:51 【问题描述】:

我有一个名为 myadd.py 的文件,其中只包含以下函数:

def myadd(a,b):
    return a+b

如何在 Linux 终端上运行它? 我正在寻找这样简单的东西:

python myadd 2,3

我的最终目标是通过制作包含以下内容的.sh 文件将多个作业发送到服务器:

bsub -J job1 python myadd 2,3
bsub -J job1 python myadd 4,5
bsub -J job1 python myadd 6,3
.
.
.
.

让我知道是否需要进行任何更改才能执行类似上述行的操作。

【问题讨论】:

@Daniel 这不是重复的,因为这个问题也接受 Fire 模块作为答案。 【参考方案1】:

您需要使用sys.argv 来接受命令行参数。我建议在两个数字之间使用空格而不是逗号。有关详细信息,请参阅 sys.argv[1] meaning in script 和 official documentation。如果您需要更复杂的命令行参数,我建议您查看 argparse 库。

【讨论】:

【参考方案2】:

您需要使用命令行参数。

例如在下面的代码中:

import sys

print ('# Args:', len(sys.argv))
print ('Argument List:', str(sys.argv))

如果你从终端调用它...

python3 test_args.py ar1 ar2 ar3 ar4 ar5

结果:

# Args:: 6
Argument List: ['test_args.py', 'ar1', 'ar2', 'ar3', 'ar4', 'ar5']

【讨论】:

【参考方案3】:

您可以使用argparse

代码:

import argparse

ap = argparse.ArgumentParser()
ap.add_argument("-n", "--numbers", required=True, default=None, type=str,
    help="Input your numbers to add separated by comma")

args = vars(ap.parse_args())

numbers = args["numbers"].split(",") # Parse the arguments
numbers = [int(i) for i in numbers] # convert from str to int list

def addition(a: int, b: int):
    """Add function"""
    return a+b

print("Result: ".format(addition(numbers[0], numbers[1])))

用法:

(pyenv)  ✘ rjosyula  ~  python x.py --help
usage: x.py [-h] -n NUMBERS

optional arguments:
  -h, --help            show this help message and exit
  -n NUMBERS, --numbers NUMBERS
                        Input your numbers to add separated by comma

结果

python x.py --numbers 2,3
Result: 5

【讨论】:

【参考方案4】:

还有fire 模块。

这只需要:

import fire

def myadd(a, b):
    return a+b

if __name__ == '__main__':
    fire.Fire(myadd)

导入保护已被编辑。这里不需要它,因为脚本不太可能用作模块。因此,我故意将其省略。

产生一个命令

python script.py 1 2

打印3

【讨论】:

以上是关于如何在 Linux 终端上运行带有输入的 python 代码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

带有服务器端输入的Java Linux守护进程/服务

如何在linux终端上一行编译运行?

linux如何在终端启动程序后可以继续输入命令?

在新终端上运行 os.system 命令 - Python 3

debian linux如何进入终端

当我在 mac 上安装了 python 3.5 时,终端运行 python 2.7。