如何在不重复 运行 这个输入函数的情况下从另一个文件导入输入变量?

How to import input variable from another file without repeated running this input function?

我的 master.py 要求输入参与者姓名,然后 运行 其他使用此名称的 .py 文件:

master.py:

participant = str(input("Participant's name: "))

if __name__ == "__main__":
    import os, subprocess
    cDir = os.path.dirname(os.path.realpath(__file__))
    files = ['antisaccade','change_detection','digit_span']
    for f in files:
        wDir = cDir+ '/' + f
        subprocess.run(["python", f+'.py'], cwd=wDir)

例如,digit_span.py:

sys.path.append(os.path.abspath('../'))
from master import participant
filename = u'data/%s_%s_%s' % participant

所以每次文件都是 运行,它们循环调用 line 输入:

participant = str(input("Participant's name: "))

但我只需要询问参与者姓名一次,然后将其发送到其他文件。

如果我把 input() 放在 if 里面,我得到

ImportError: cannot import name 'participant'

有人可以解释一下如何解决这个问题吗?

如果 master.py 询问列表中的名称和 运行 脚本 .py,什么你可以做的就是将名称作为参数传递。

就像这样:

master.py

participant = list([str(input("Participant's name: "))])
if __name__ == "__main__":
    import os, subprocess
    cDir = os.path.dirname(os.path.realpath(__file__))
    files = ['slave']
    for f in files:
        wDir = cDir+ '/' + f
        subprocess.Popen(["python", "{0}.py".format(wDir)]+participant)

slave.py

import sys

with open("check.txt".format(sys.argv[1]),'w') as f:
    f.write("{0} participant".format(sys.argv[1]))

master.py 将 运行 slave.py 连同参数。

为了测试结果,它会生成一个文件check.txt,其中包含参与者的名字,这意味着master.py 正在将名称传递给 (slave.py) 脚本。