【问题标题】:Script called from another script with arguments from another variable使用来自另一个变量的参数从另一个脚本调用的脚本
【发布时间】:2019-01-08 07:46:13
【问题描述】:

我已经创建了 Python 脚本,我想在下面运行并调用另一个脚本,然后给被调用的脚本一个变量,在这种情况下,它将是一个电子邮件地址,作为文本文件中的“行”。请问最简单的方法是什么?

现在的问题是被调用的脚本不会将“line”变量作为参数。

import bob 
import os 
# file handle fh fh = open('mailout.txt') while True:
# read line
line = fh.readline()
line = line.replace("\r", "").replace("\n", "")
command = 'python3 bob.py ' + line
os.system(command)
# check if line is not a empty value
if not line:
    break fh.close()

【问题讨论】:

  • “它不会接受”?如,它不是为了接受论点而写的吗?那么你不能强迫它。
  • 另外,执行该代码可能有比使用os.system 从命令行调用它更好的方法
  • 更明确地跟进@sundance 的评论,更好的模式可能是from bob import a_func,然后是a_func(line)
  • 哦不,它确实需要参数,但是被调用的脚本抱怨没有给它任何参数。我想我的主要问题是,实现这一目标的最佳方法是什么?
  • 查看@Zach 的评论:导入函数在脚本中运行它可能会更好。除此之外,发生这种情况的原因可能是因为需要引用该论点。尝试command = 'python3 bob.py "{}"'.format(line),假设您的line 没有任何双引号

标签: python python-3.x variables parameter-passing


【解决方案1】:

作为@Zach 的评论,您可以通过将 line 作为参数来调用它。否则,您可以使用argparse 来完成。假设你有两个函数inner.py 和outer.py。

inner.py

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-s', '--sentence')
args = parser.parse_args()
print(args.sentence)

outer.py

import os
f = open('email.txt')
line = f.readline()
line = line.replace("\r", "").replace("\n", "")
line = "\""+line+"\""
command = 'python inner.py -s' + line
os.system(command)

然后调用python outer.py 返回

只需一行即可尝试

【讨论】:

  • 谢谢我试过这个,但在我的例子中,行是从文本文件中逐行读取的电子邮件地址。我应该在文本文件中的各个电子邮件周围加上双引号还是单引号才能正常工作?
  • 以现在从文本文件中读取行的方式编辑了答案。
猜你喜欢
  • 1970-01-01
  • 2020-03-22
  • 2012-09-13
  • 2011-06-01
  • 2022-08-02
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 2019-06-18
相关资源
最近更新 更多