TLDR;我需要文件 2 (CCST_SUP.py) 从文件 1 (CCST_Multi_Simp.py) 导入 2 个变量,而不要求在文件 1 中重复输入变量。
我正在尝试编写一个可以同时运行多个 Collatz 方程式的程序,为了使其有用,我需要相邻的程序在并排运行时从最后一个程序停止的地方开始。我决定为此运行一个入门程序,该程序将打开脚本文件并从启动器中提取变量,这些变量会随着程序的每次迭代而增加,并且希望每个程序并排运行。但是,当我运行启动程序并输入我希望它进行多少次迭代时,它会在运行算法之前重新运行启动程序。我可能会遗漏一些愚蠢的简单的东西我只是为此学习了 python,所以我的知识有限并且搜索证明没有结果。
#CCST_Multi_Simp.py
r0 = int(input('how many times to repeat program: '))
r1 = 0
Start = 1
Rep = 1000
code = "start cmd /k python C:\\Users\\anon\\OneDrive\\Desktop\\CCST\\CCST-SUP.py"
import os
while r0 != r1 or r1 > r0:
os.system(code)
Start += 1000
r1 += 1
from CCST_Multi_Simp import *
#First input value is your starting seed
z = int(CCST_Multi_Simp.Start)
#Second input is how many seeds after you want to test
#Set r1 to -1 to test indefinatly (do not reccomend)
#best to set r1 to 1 for higher numbers (youll see why if you dont know already)
r1 = int(CCST_Multi_Simp.Rep)
x = z
y = 0
r0 = 0
#line break
print(" ")
#incase some smoothbrain doesnt read that i need two inputs
if r1:
print()
print("ready")
print()
else:
r1 = 1
print()
print("ready")
print()
#Runs the loop for the number of seeds you want to test
while r0 != r1:
#used to determine which formula to use
w = float(x % 2)
#determines when to end testing
if x != 1:
#calculations for even numbers
if w == 0:
y = x / 2
x = y
else:
#calculation for odd numbers
y = x * 3 + 1
x = y
else:
#sets up for the next seed
print("<----------------------------->")
print("End Of Seed", z)
import time
t = time.localtime()
current_time = time.strftime("%H:%M:%S", t)
print(current_time)
z += 1
x = z
r0 += 1
#past here is formatting for the end of program
详细的注释是因为我从这个项目复制和粘贴我从另一个站点发布,它只是运行指定的种子替换我想要为
input()
导入的变量我不继续input()
的原因是因为它会将这两个值输入 15 次以上是乏味的
我尝试通过几种不同的方式导入变量,包括
from [file] import *
和简单的 import [File]
变量导入正确我只是不知道如何在我这样做时不运行启动程序。
糟糕...您混淆了从模块导入符号和将参数传递给子进程。
import
仅执行第一个任务:当您将程序拆分为多个源文件(或使用库包)时,主模块 imports 其他模块,然后通过导入机制访问它们的符号 inside the same process .
在这里你有一个主要的process启动子进程。由于进程是不同的,一个进程不能访问另一个进程中的任何变量。一个快速而肮脏的修复方法是在启动时传递相关值并从命令行将它们获取到子进程中:
在laucher程序中:
...
Start = 1
Rep = 1000
# add relevant values at the end of the command line
code = f"start cmd /k python C:\\Users\\anon\\OneDrive\\Desktop\\CCST\\CCST-SUP.py {Start} {Rep}"
...
在儿童节目中:
import sys
#First input value is your starting seed
z = int(sys.argv[1])
#Second input is how many seeds after you want to test
#Set r1 to -1 to test indefinatly (do not reccomend)
#best to set r1 to 1 for higher numbers (youll see why if you dont know already)
r1 = int(sys.argv[2])
...
但是使用
os.system
并不是最佳实践......您至少应该使用 subprocess
模块,它可以更好地控制子进程,或者寻找 multiprocessing
模块,因为您的子进程只是 Python 模块。