我将使用C在python中并行化一个巨大的任务。 python脚本可用here。附加的脚本是单个密度(dens
)列的工作原型。下一步是通过调用1000个新的dens
列(顺序)将其转换为蒙特卡罗模拟,这些列已经在名为0001.txt - 1000.txt
的文件中创建(每个列都有一列dens
个值对应于nodes
)。
显然,第一步是从以下行中删除dens
...
x1, x2, y1, y2, z1, z2, dens = np.loadtxt('nodes.txt', delimiter=' ', usecols=(0, 1, 2, 3, 4, 5, 6), unpack=True)
......这很容易。创建了以下几行来解决脚本本身的初始问题,这些问题让我知道了我想要做的事情......
x1, x2, y1, y2, z1, z2 = np.loadtxt('nodes.txt', delimiter=' ', usecols=(0, 1, 2, 3, 4, 5), unpack=True)
for i in range (1,1001):
dens, = np.loadtxt('{:0>4}.txt'.format(i), delimiter=' ', usecols=(0), unpack=True
...但我被告知这不允许在我们的集群上进行并行化,我需要在命令行中使用某些内容,例如......
python myscript.py 000.txt
我的问题是如何将dens
编码到脚本中,以便上述命令提示符可以正常工作?
我找到this页面,其中显示的选项如...
from subprocess import call
call([])
和
os.system
...但我不完全确定如何调整它以便它正确地将正确的变量调用到正确的位置。抱歉,如果这是一个简单的解决方案,但我已经被python抛到了深处,我仍然在努力站起来。
答案 0 :(得分:1)
This answer向您展示如何从python中获取命令行输入:
import sys
print sys.argv
所以你可以使用
filename = sys.argv[1]
dens, = np.loadtxt(filename, delimiter=' ', usecols=(0), unpack=True)
当然,您应该添加自己的错误检查。