我试图通过某些参数传递给终端使我的代码可执行。 我找不到解决类似情况的任何问题或答案。 问题在于,处理参数的顺序也有些含糊。我尝试给出所有选项,但随后它说-p选项需要整数值,并丢弃-p之后立即提供的值。相反,它指向提供的主机名作为失败原因。
当我运行以下命令时,应该执行python脚本:
./Talktoserver -p <portnumber> [hostname] [message]
在这种情况下,如果未提供-p和主机名,则程序应采用默认值。但是必须提供消息。
我尝试使用argparse并尝试封装所有参数并在代码中重用它们,但是它们的顺序完全被弄乱了。
预期结果是,如果用户输入以下任意一项,则代码应执行:
./Talktoserver -p 22 anysite.com Message
./Talktoserver Message
./Talktoserver -p 22 Message
在以下情况下应显示帮助文本: 消息丢失 -p已给出,但没有给出有效的int值。
在所有其他情况下,它应该替换默认值。 (例如,google.com输入主机名,端口号22)
parser.add_argument('-p', metavar='N', type=int, nargs='+', default= 27995,
help='Use if you want to specify a custom port number.')
parser.add_argument('hostname', action='store', type = str, default= 'any site.com',
help='Use if you want to provide a custom hostname.')
parser.add_argument('message', dest = '', action='store', type = str, required=True,
help='Please provide a message')
args = parser.parse_args()
print(args.accumulate(args.integers))
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Creating a socket object.
port = parser['num']
hostname = parser['hostname']
message = parser['message']
equ = 'Hello There\n'# Readying the greeting message to be sent to the server.
s.connect((hostname, port))
答案 0 :(得分:0)
欢迎堆栈溢出:)
以下内容足以满足您的需求。
import argparse
parser = argparse.ArgumentParser(description="")
parser.add_argument(
"-p",
metavar="N",
type=int,
default=27995,
help="Use if you want to specify a custom port number.",
)
parser.add_argument(
"hostname",
action="store",
type=str,
nargs="?",
default="any site.com",
help="Use if you want to provide a custom hostname.",
)
parser.add_argument(
"message",
action="store",
type=str,
help="Please provide a message",
)
args = parser.parse_args()
port = args.p
hostname = args.hostname
message = args.message
print(f"port: {port}, hostname: {hostname}, message: {message}")
现在的帮助文本如下:
usage: Talktoserver [-h] [-p N] [hostname] message
positional arguments:
hostname Use if you want to provide a custom hostname.
message Please provide a message
optional arguments:
-h, --help show this help message and exit
-p N Use if you want to specify a custom port number.
如果还没有的话,请查看official argsparse docs,以获取涵盖所有选项的更详细的信息。