小编Bre*_*ugh的帖子

从z/os下载Python和ftplib.FTP的文本文件

我正在尝试使用Python和ftplib自动从az/os PDS下载一些文本文件.

由于主机文件是EBCDIC,我不能简单地使用FTP.retrbinary().

FTP.retrlines()当与open(file,w).writelines一起用作其回调时,当然不提供EOL.

所以,对于初学者来说,我已经提出了这段"看起来对我好"的代码,但由于我是一个相对的Python noob,有人能提出更好的方法吗?显然,为了保持这个简单的问题,这不是最后的,钟声和口哨的事情.

非常感谢.

#!python.exe
from ftplib import FTP

class xfile (file):
    def writelineswitheol(self, sequence):
        for s in sequence:
            self.write(s+"\r\n")

sess = FTP("zos.server.to.be", "myid", "mypassword")
sess.sendcmd("site sbd=(IBM-1047,ISO8859-1)")
sess.cwd("'FOO.BAR.PDS'")
a = sess.nlst("RTB*")
for i in a:
    sess.retrlines("RETR "+i, xfile(i, 'w').writelineswitheol)
sess.quit()
Run Code Online (Sandbox Code Playgroud)

更新:Python 3.0,平台是Windows XP下的MingW.

z/os PDS具有固定的记录结构,而不是依赖行结尾作为记录分隔符.但是,z/os FTP服务器在文本模式下传输时,会提供记录结尾,其后退()剥离.

结账更新:

这是我修改后的解决方案,它将成为持续开发的基础(例如,删除内置密码):

import ftplib
import os
from sys import exc_info

sess = ftplib.FTP("undisclosed.server.com", "userid", "password")
sess.sendcmd("site sbd=(IBM-1047,ISO8859-1)")
for dir in ["ASM", "ASML", "ASMM", "C", "CPP", "DLLA", "DLLC", "DLMC", "GEN", "HDR", "MAC"]: …
Run Code Online (Sandbox Code Playgroud)

python ftp mainframe zos

5
推荐指数
1
解决办法
1万
查看次数

推荐的测试和生产实例的git工作流程

虽然我已经使用git一段时间了,但我仍然认为自己是n00b,所以请不要对我太苛刻.

我将"公司"主机系统维护为两个不相同的副本.我们称之为测试和生产.大型机没有任何我(或许可能是你们中的任何一个)会认为是版本控制系统的东西,所以我在桌面上使用git来为我提供版本控制.以下是我当前工作流程的主要功能:

  • 桌面和大型机与FTP"同步".最后,无论是在大型机还是PC上编写的所有开发工作都会在git分支机构的PC上完成.

  • 我无法访问任何类型的"现代"部署技术,如Hudson

  • 我有两个主要的分支,称为Test和Prod.由于产品的(继承)结构,Test和Prod实例之间的代码存在许多差异.例如,所有显示面板都需要清楚地识别这是Test还是Prod,但是没有办法在单点配置它.

  • 我通常为特定的开发子项目创建其他分支.

  • 一般开发在Test分支上完成,具有多个提交.准备好后,将这些樱桃挑选到Prod上,标记有更改编号,并在批准后上传.

  • 幸运的是,紧急工作是在Prod分支上完成的,并且是挑选出来的.

  • 偶尔采摘樱桃需要手动合并.

我想改进这个工作流程.目前,我的存储库在两个分支上充满了并行相同的更改.

我想我更喜欢这样做(对于Test - > Prod):

  • 一旦开发准备就绪,在Prod的HEAD创建一个新的分支

  • 将这组开发更改折叠为新分支上的单个更改

  • 将这个新分支合并到Prod.请记住,他们的共同祖先是使测试与Prod不同的变化之前

它似乎git rebase -i可以完成这项工作,但我必须承认这git rebase是我的脑桥asinorum,不知怎的,我已经设法弄乱了我的树多次.

所以我的问题是:

  1. 请在产品的限制范围内建议更好的方法.

  2. 如果我的首选方法可行,有人可以建议正确的参数git rebase -i吗?

git deployment workflow git-rebase

5
推荐指数
1
解决办法
1231
查看次数

版本控制在多大程度上有助于系统管理?

我目前正在修改一个OpenBSD系统,以便建立自己的防火墙和其他一些东西.

因为这是相当实验性的(我是一个OpenBSD n00b,我已经把我的系统破坏了3到4次),我想知道其他人制作部分或全部文件系统的经验(我特别想到的是/ etc)某些VCS或其他的工作副本.

  • 这是一个好主意吗?

  • 我特别感兴趣的是VCS用户为此做了什么.我正在考虑颠覆,集市和git; 这不是一个共享的存储库,所以我对基本的vcs功能比对distributed-or-not参数更感兴趣.

  • 我也想知道人们发现的想象或实际陷阱.我可以想象保存文件所有权和权限需要仔细考虑!

  • 当然,任何不涉及VCS的替代方法

unix linux sysadmin version-control openbsd

4
推荐指数
1
解决办法
1741
查看次数

什么(如果有的话)是最小化 IO Monad 对我的代码的影响的普遍接受的方式

我在 IO Monad 上有点挣扎。(仍然是 101 的学习者)

我相信我理解将“IO”与纯功能代码分离的绝佳理由,但这似乎使我的代码在使用时钟和环境属性时变得更加复杂。这是一个示例(与时钟相关):

timeZoneSeconds = liftA (60*) $ liftA timeZoneMinutes getCurrentTimeZone
Run Code Online (Sandbox Code Playgroud)

现在,我还有很多其他的东西与 timeZoneSeconds 相关——加、减、比较——在程序的其他地方,而且当 timeZoneSeconds 与其他位交互时,几乎我处理的所有事情都变成了“IO”,因此用liftAs填充我的代码。

所以基本上我看到我所有的纯代码都变成了 IO 脏代码。

在我看过的所有教学材料中,大部分关于 IO monad 的解释都是“读东西然后写东西”的一般类型,没有太多“计算东西”。

有没有推荐的方法来减少这种影响?

我是否应该重新定义我需要在“幕后”使用liftA 的所有操作符?

还是我应该继续下去?

haskell functional-programming io-monad

4
推荐指数
1
解决办法
136
查看次数

如何在 Haskell 中使用额外的类型来获得额外的类型安全

我是 Haskell 的新手,并且非常享受。

作为练习,我编写了一个修改日期和时间的程序。特别是,我正在做涉及分钟、秒和微秒的计算。现在我发现,在调试时,我有很多错误,例如,我将分钟添加到秒而不乘以 60。

为了将调试从运行时转移到编译时,我想到我可以使用“类型同义词加多态函数”来做这样的事情:

module Main where
type SecX = Integer
toMin :: SecX -> MinX
toMin m = div m 60
type MinX = Integer
toSec :: MinX -> SecX
toSec = (60 *)
main :: IO ()
main = do
  let x = 20 :: MinX
  let y = 20 :: SecX
  let z = x + y       -- should not compile
  print [x,y,z]
Run Code Online (Sandbox Code Playgroud)

但这种方法给我带来了两个问题:

  1. 标记为“不应该编译”的行实际上确实可以编译,然后继续添加 20 分钟到 20 秒以给出 40 个东西
  2. 当我为微秒添加其他类型的 MuSecX 时,我无法编译 toMin …

haskell types

4
推荐指数
1
解决办法
91
查看次数

是否有 Haskell 模块用于将元数据编译到我的包中

我已成功使用GitHash 模块将分支名称等内容烘焙并将哈希值提交到程序中。

是否有其他类似的模块可以以package.yaml类似的方式从中提取数据?(我猜涉及到 TemplateHaskell?)具体来说,目前我对版本字符串感兴趣,但更广泛的解决方案可能非常有用。

haskell metadata version

4
推荐指数
1
解决办法
74
查看次数

字符串看起来多长?

我很想知道它出现在屏幕上的字符串有多长.我们没有使用固定宽度的字体,所以:

"Our mother's tummy makes dummy noises."
Run Code Online (Sandbox Code Playgroud)

远远超过:

"Lilly Leadbetter lives life leisurely."
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉人物有多长时间?我不需要像素完美的精确度,只需要在大致正确的位置椭圆就足够长.CSS溢出无济于事,因为在CSS确定了多长时间之后我无法附加椭圆.

css text

3
推荐指数
1
解决办法
197
查看次数

如何在 Options.Applicative 中为互斥标志编码

我是 Haskell 新手。作为一项学习练习,我正在尝试将我的一个 Rust 程序移植到 Haskell。在 Rust 中,我使用了令人惊叹的clap包,并且被认为是Options.Applicative一个好看的替代品。下面是一个例子:

import Options.Applicative
import Data.Semigroup ((<>))

data Sample = Sample
  { tod        :: Bool
  , pmc        :: Bool
  , tai        :: Bool
  }

sample :: Parser Sample
sample = Sample
      <$>  switch
          ( long "tod"
            <> short 'o'
            <> help "Convert from TOD" )
      <*> switch
          ( long "pmc"
            <> short 'p'
            <> help "Convert from PMC" ) 
      <*> switch
          ( long "tai"
            <> short 't'
            <> help "Set …
Run Code Online (Sandbox Code Playgroud)

haskell optparse-applicative

3
推荐指数
1
解决办法
180
查看次数

懒惰,贪婪还是什么?寻找权威的正则表达式参考

最近,在网络的某个地方*,我找到了正则表达式的参考,它描述了贪婪的"第三种方式",不同于贪婪(.*)和懒惰的(.*?)匹配.

我现在尝试搜索SO,谷歌搜索,甚至搜索我的浏览器历史记录,但无济于事.

有谁可以很好地猜测我看到的是什么?


澄清:它提到了什么对我来说是一个新的结构(类似的东西.*+),我相信它甚至有一个名称(类似,但可能不是,"被动地贪婪").


* 我很欣赏"在网上的某个地方"和"在巴别图书馆"或"在Mandelbrot集合中"一样有用,但请尽量帮助

regex regex-greedy

2
推荐指数
1
解决办法
1141
查看次数