用python生成petsc二进制文件

2024-09-27 22:39:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python创建一个PETSC二进制文件。我试图在bashshell上运行脚本,但是我得到了一个错误

$ python -c 'print file.shape\n import sys,os\n sys.path.append(os.path.join(os.environ['PETSC_DIR'],'bin','pythonscripts'))\nimport PetscBinaryIO\nio=PetscBinaryIO.PetscBinaryIO()\nfile_fortran=file.transpose((2,1,0))\n io.writeBinaryFile('my_geometry.dat',(walls_fortran.rave1()).view(PetscBinaryIO.Vec),))'

Unexpected character after line continuation character.

我知道这是因为有一个额外的\,但我的代码似乎没有任何。我尝试使用python-I以交互方式运行python,以找出代码的哪一部分有问题

^{pr2}$

我是python新手,所以我知道这可能是一个明显的错误。但我好像不知道这是怎么回事

谢谢约翰的回答。 现在它识别了PETSC_DIR,我得到了错误

 >>> PETSC_DIR="/home/petsc-3.4.3"
 >>> sys.path.append(os.path.join(os.environ["PETSC_DIR"],"bin","pythonscripts"))

     Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
     File "/usr/lib64/python2.6/UserDict.py", line 22, in __getitem__
     raise KeyError(key)
     KeyError: 'PETSC_DIR'</code>

它不识别PETSC_DIR,即使我指定了它


Tags: pathbinos错误dirsyslineenviron
1条回答
网友
1楼 · 发布于 2024-09-27 22:39:39

为了举例说明,让我们从bash脚本中摘录一小部分:

python -c 'print file.shape\n import sys,os\n'

在bash单引号字符串中,“\n”表示后跟“n”的反斜杠。Python将其视为“额外的反斜杠”,即使您的意思是“\n”被解释为换行符。这就是生成类型错误的原因

^{pr2}$

要解决此问题,请尝试:

python -c $'print file.shape\n import sys,os\n'

Bash特别处理$'...'字符串,并将用python理解并知道如何处理的新行字符替换{}序列。在

(由于file没有shape属性,因此上述内容仍将给出一个错误。更多信息请参见下文。)

还有其他问题。以这段摘录为例:

python -c 'sys.path.append(os.path.join(os.environ['PETSC_DIR'],'bin','pythonscripts'))'

在bash引用removation之后,python看到:

sys.path.append(os.path.join(os.environ[PETSC_DIR],bin,pythonscripts))

这行不通,因为python需要引用PETSC_DIR和{}和{}(使用单引号或双引号:python不在乎)。试试看:

python-c'系统路径追加(os.path.join操作系统(操作系统环境[“PETSC_DIR”],“bin”,“pythonscripts”))'

当bash在单引号中看到双引号时,它将不使用它们。因此,python将在需要的地方接收带引号的字符串。在

总之,在我看来,错误不是由python代码引起的,而是bash在将python代码传递给python之前对其所做的操作造成的。在

附录:至于print walls.shape()错误,其中walls是一个文件句柄,这个错误的意思是:文件句柄没有shape属性。您可能想使用os.path模块中的^{}函数来获得以字节为单位的文件大小?在

相关问题 更多 >

    热门问题