fealpy icon indicating copy to clipboard operation
fealpy copied to clipboard

关于argv运行的问题咨询

Open yhhan1220 opened this issue 3 years ago • 10 comments

魏老师好,请问examples有些例子出现很多argv的 直接运行时不可行,应该输入什么命令才可以,为什么需要这样?谢谢

p = int(sys.argv[1]) n = int(sys.argv[2]) maxit = int(sys.argv[3])

yhhan1220 avatar Apr 25 '21 01:04 yhhan1220

sys.argv[] 中其实就是一个列表,里面是存放的是程序外部输入的参数,例如 example/PoissonFEMWithDirichletBC_example.py,运行时可以用 >python PoissonFEMWithDirichletBC_example.py 1 2 3 2,其中 1 2 3 2 分别对应

p = int(sys.argv[1])
n = int(sys.argv[2])
maxit = int(sys.argv[3])
d = int(sys.argv[4])

如果你直接在 IDE 下运行,可以注释掉上面的,改为

p = 1   # 多项式阶数
n = 2  # 初始网格加密次数
maxit = 3  # 
d = 2  # 空间维数

yoczhang avatar Apr 25 '21 06:04 yoczhang

sys.argv[] 中其实就是一个列表,里面是存放的是程序外部输入的参数,例如 example/PoissonFEMWithDirichletBC_example.py,运行时可以用 >python PoissonFEMWithDirichletBC_example.py 1 2 3 2,其中 1 2 3 2 分别对应

p = int(sys.argv[1])
n = int(sys.argv[2])
maxit = int(sys.argv[3])
d = int(sys.argv[4])

如果你直接在 IDE 下运行,可以注释掉上面的,改为

p = 1   # 多项式阶数
n = 2  # 初始网格加密次数
maxit = 3  # 
d = 2  # 空间维数

好的。谢谢,直接在IDE下可以,但是另一种方式 会显示类似 ImportError: No module named mpl_toolkits.mplot3d 这种,您清楚是什么原因导致么? 直接在IDE里改了p n maxi d是ok的

yhhan1220 avatar Apr 25 '21 07:04 yhhan1220

如果直接在终端下命令行运行的话,要看你调用的是哪个 python 了,比如,你是通过 Anaconda (虚拟环境) 安装的 fealpy,那么你需要先激活 fealpy 这个虚拟环境,然后在此环境下 python fealpyexample.py。你可以查看你的 IDE 调用的是哪个路径下的 python,然后可以在终端下输入绝对路径下的 python 也是可以的。

yoczhang avatar Apr 25 '21 07:04 yoczhang

如果直接在终端下命令行运行的话,要看你调用的是哪个 python 了,比如,你是通过 Anaconda (虚拟环境) 安装的 fealpy,那么你需要先激活 fealpy 这个虚拟环境,然后在此环境下 python fealpyexample.py。你可以查看你的 IDE 调用的是哪个路径下的 python,然后可以在终端下输入绝对路径下的 python 也是可以的。

好的,谢谢

yhhan1220 avatar Apr 25 '21 07:04 yhhan1220

这些例子的命令行的参数处理的比较偷懒,我后面会抽时间用 argparse 这个包重新改造一下这些例子,增加更多的调用说明。

weihuayi avatar Apr 25 '21 13:04 weihuayi

这些例子的命令行的参数处理的比较偷懒,我后面会抽时间用 argparse 这个包重新改造一下这些例子,增加更多的调用说明。

谢谢魏老师

yhhan1220 avatar Apr 26 '21 06:04 yhhan1220

@yhhan1220 我更新了一个算例 example/PoissonFEMWithDirichletBC_example.py 的参数处理方式, 现在用了 argparse 这个包, 加入了参数说明,用起来应该更清楚一点了。用 --help 或者 -h 参数就可以查看帮助信息。

$ python3 PoissonFEMWithDirichletBC_example.py --help 
usage: PoissonFEMWithDirichletBC_example.py [-h] [--degree DEGREE] [--dim DIM] [--nrefine NREFINE] [--maxit MAXIT]

单纯形网格(三角形、四面体)网格上任意次有限元方法

optional arguments:
  -h, --help         show this help message and exit
  --degree DEGREE    Lagrange 有限元空间的次数, 默认为 1 次.
  --dim DIM          模型问题的维数, 默认求解 2 维问题.
  --nrefine NREFINE  初始网格加密的次数, 默认初始加密 4 次.
  --maxit MAXIT      默认网格加密求解的次数, 默认加密求解 4 次

weihuayi avatar Apr 28 '21 01:04 weihuayi

@yhhan1220 我更新了一个算例 example/PoissonFEMWithDirichletBC_example.py 的参数处理方式, 现在用了 argparse 这个包, 加入了参数说明,用起来应该更清楚一点了。用 --help 或者 -h 参数就可以查看帮助信息。

$ python3 PoissonFEMWithDirichletBC_example.py --help 
usage: PoissonFEMWithDirichletBC_example.py [-h] [--degree DEGREE] [--dim DIM] [--nrefine NREFINE] [--maxit MAXIT]

单纯形网格(三角形、四面体)网格上任意次有限元方法

optional arguments:
  -h, --help         show this help message and exit
  --degree DEGREE    Lagrange 有限元空间的次数, 默认为 1 次.
  --dim DIM          模型问题的维数, 默认求解 2 维问题.
  --nrefine NREFINE  初始网格加密的次数, 默认初始加密 4 次.
  --maxit MAXIT      默认网格加密求解的次数, 默认加密求解 4 次

谢谢魏老师,已更新

yhhan1220 avatar Apr 28 '21 04:04 yhhan1220

老师我有如下的一段代码

# -*- coding: utf-8 -*-
"""
Created on Wed Jul 21 20:34:16 2021

@author: Administrator
"""

import sys
import numpy as np
import matplotlib.pyplot as plt

from fealpy.mesh import MeshFactory as MF
from fealpy.functionspace import LagrangeFiniteElementSpace

p = int(sys.argv[1])

box = [0, 1, 0, 1]
mesh = MF.boxmesh2d(box, nx=1, ny=1, meshtype='tri')

space = LagrangeFiniteElementSpace(mesh, p=p)

bc = np.array([[1/3, 1/3, 1/3]], dtype=np.float64)
phi = space.basis(bc)
gphi = space.grad_basis(bc)

print('bc', bc.shape)
print('phi', phi.shape)

multiIndex = space.dof.multiIndex

fig = plt.figure()
axes = fig.gca()
mesh.add_plot(axes)
mesh.find_node(axes,showindex=True) 
mesh.find_cell(axes,showindex=True) 

报错信息如下:

Traceback (most recent call last):
  File "bc的应用.py", line 15, in <module>
    p = int(sys.argv[1])
IndexError: list index out of range

我把p = int(sys.argv[1])注释掉后,将p=p改为p=3可以得到正确的结果. 老师,我还想请问一下p = int(sys.argv[1])的方便之处在哪里!

xiang-tao avatar Jul 21 '21 13:07 xiang-tao

你不改程序,就可以在命令行里测试不同的 p 

pthon3 filename.py 3 # 测试 3 次的例子

    ------------------ Original ------------------ From: @.>; Date:  Wed, Jul 21, 2021 09:19 PM To: @.>; Cc: @.>; @.>; Subject:  Re: [weihuayi/fealpy] 关于argv运行的问题咨询 (#35)

 

老师我有如下的一段代码

-- coding: utf-8 -- """ Created on Wed Jul 21 20:34:16 2021 @author: Administrator """ import sys import numpy as np import matplotlib.pyplot as plt from fealpy.mesh import MeshFactory as MF from fealpy.functionspace import LagrangeFiniteElementSpace p = int(sys.argv[1]) box = [0, 1, 0, 1] mesh = MF.boxmesh2d(box, nx=1, ny=1, meshtype='tri') space = LagrangeFiniteElementSpace(mesh, p=p) bc = np.array([[1/3, 1/3, 1/3]], dtype=np.float64) phi = space.basis(bc) gphi = space.grad_basis(bc) print('bc', bc.shape) print('phi', phi.shape) multiIndex = space.dof.multiIndex fig = plt.figure() axes = fig.gca() mesh.add_plot(axes) mesh.find_node(axes,showindex=True) mesh.find_cell(axes,showindex=True)

报错信息如下: Traceback (most recent call last): File "bc的应用.py", line 15, in <module> p = int(sys.argv[1]) IndexError: list index out of range

我把p = int(sys.argv[1])注释掉后,将p=p改为p=3可以得到正确的结果. 老师,我还想请问一下p = int(sys.argv[1])的方便之处在哪里!

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

weihuayi avatar Jul 22 '21 00:07 weihuayi