在使用 argparse 传递参数后,如何将 python 脚本作为批处理作业运行? [英] How can you run a python script as a batch job after passing an argument using argparse?

查看:17
本文介绍了在使用 argparse 传递参数后,如何将 python 脚本作为批处理作业运行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道在使用 argparse 后是否可以将 python 脚本作为 bash 作业运行?我尝试这样做,首先使用 argparse 在 python 脚本文件中传递一个参数,然后使用命令:

I was wondering whether it is possible to run a python script as a bash job after using argparse? I tried doing this by first passing an argument in the python script file using argparse and then I used the command:

bash bash1.sh 

运行将运行 python 脚本文件的 bash 文件.这导致了错误

to run the bash file that will run the python script file. This resulted in an error

message_script.py: error: too few arguments 

此错误是由于 argparse 参数未被识别造成的.有什么办法可以使用 argparse 传递参数,然后将 python 脚本作为批处理作业运行吗?

This error resulted from the fact that the argparse argument wasn't recognised. Is there any way I can get to pass the argument using argparse then run the python script as a batch job?

message_script.py 的内容:

Content of message_script.py:

import sys
import random
import numpy as np
import argparse
from PIL import Image
import matplotlib.pyplot as plt

#Input of Data File
#Proprtion Alpha
parser = argparse.ArgumentParser()
parser.add_argument("Alpha", help = "proportion of pixels to be embedded in cover image")
args = parser.parse_args()
alpha = args.Alpha
alpha = float(alpha) #args.alpha came back as a string hence needed to be converted to float

#n is the number of pixels in cover image
n = 512*512 #since all images in BossBase testbench are 512 by 512

#Length of message to be embedded in cover image
length_msg = (alpha * n)
len_msg = int(length_msg)

#Generates a random message, a 1D vector consisting of 1s and 0s
msg = np.random.randint(2, size= len_msg)

#Save message in text format representing each bit as 0 or 1 on a separate line
msg_text_file = open("/home/ns3/PycharmProjects/untitled1/msg_file.txt", "w") #Path of Data File
msg_text_file.write("\n".join(map(lambda x: str(x), msg)))
msg_text_file .close()

bash1.sh 的内容:

Content of bash1.sh:

#!/bin/sh
python message_script.py

推荐答案

您需要将参数传递给 python 脚本.如果你知道你的参数的确切数量,你可以这样写:

You need to pass along the arguments to the python script. If you know the exact number of your arguments you can write smth like:

#!/bin/bash
# passing two arguments
python message_script.py "$1" "$2"

或全部:

#!/bin/bash
python message_script.py "$@"

这篇关于在使用 argparse 传递参数后,如何将 python 脚本作为批处理作业运行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆