如何在不重复 运行 这个输入函数的情况下从另一个文件导入输入变量?
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) 脚本。
我的 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) 脚本。