首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python生成petsc二进制文件

使用python生成petsc二进制文件
EN

Stack Overflow用户
提问于 2013-12-12 23:39:38
回答 1查看 531关注 0票数 0

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

$ 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),))'

代码语言:javascript
复制
Unexpected character after line continuation character.

我知道这是因为额外的\,但我的代码似乎没有。我尝试以交互方式运行python,以便使用python -i查找代码的哪一部分是错误的。

代码语言:javascript
复制
>>> walls=open('file.dat','r+')
>>> print walls.shape()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'file' object has no attribute 'shape'

我对python并不熟悉,所以我知道这可能是一个明显的错误。但我似乎不知道这是怎么回事

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

代码语言:javascript
复制
 >>> 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,即使我指定了它

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-13 05:49:37

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

代码语言:javascript
复制
python -c 'print file.shape\n import sys,os\n'

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

代码语言:javascript
复制
unexpected character after line continuation character

要解决这个问题,请尝试:

代码语言:javascript
复制
python -c $'print file.shape\n import sys,os\n'

Bash专门处理$'...'字符串,并将\n序列替换为新的行字符,python将了解并知道如何处理这些字符。

(由于file没有shape属性,所以上面仍然会出现错误。(下文将对此作更多介绍。)

还有其他问题。以这段节选为例:

代码语言:javascript
复制
python -c 'sys.path.append(os.path.join(os.environ['PETSC_DIR'],'bin','pythonscripts'))'

在bash引用删除之后,python看到:

代码语言:javascript
复制
sys.path.append(os.path.join(os.environ[PETSC_DIR],bin,pythonscripts))

这是行不通的,因为python需要引用PETSC_DIRbinpythonscripts (不管是单引号还是双引号: python都不在乎)。试一试:

'sys.path.append(os.path.join(os.environ"PETSC_DIR",-c -c "bin",“pythonscript”)‘

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

总之,在我看来,这个错误不是由您的python代码引起的,而是由bash在将它传递给python之前对您的python代码所做的。

增编:对于print walls.shape()错误( walls是文件句柄),该错误的意思是:文件句柄不具有shape属性。您可能希望使用来自os.path.getsize(path)模块的os.path函数来获取文件大小(以字节为单位)?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20556499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档