在使用 argparse 传递参数后,如何将 python 脚本作为批处理作业运行? [英] How can you run a python script as a batch job after passing an argument using argparse?
问题描述
我想知道在使用 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屋!