【问题标题】:How did I overwrite my whole python program with this command prompt command?我是如何用这个命令提示符命令覆盖我的整个 python 程序的?
【发布时间】:2017-01-18 03:49:51
【问题描述】:

所以我将一些值放入我编写的 Python 程序中(它的作用无关紧要):

E:\Users\Me\Desktop\Python>idtohex.py

输入 ID:213467

DB 41 03

很好,它工作正常。现在我不小心把这个字符串复制到了我的剪贴板:

[此处换行]

E:\Users\Me\Desktop\Python>idtohex.py

从我最初在命令提示符中启动程序时开始。

现在,由于换行,我的程序由于无法处理输入而崩溃(糟糕):

ValueError: int() 以 10 为底的无效文字:''

由于这个错误,我现在返回命令提示符并输入剪贴板中的下一行,它正在尝试运行此命令:

E:\Users\Me\Desktop\Python>idtohex.py

命令提示符给了我这个错误,所以我认为这没什么大不了的,继续吧:

'E:\Users\Me\Desktop\Python' 未被识别为内部或外部命令,

可运行的程序或批处理文件。

现在我尝试再次运行该程序,但我的整个程序完全是空的。 Overwritten. 0-bytes on disk。因此,由于这个简单的错误,我不知何故覆盖了我的整个程序,并且无法恢复它。

地狱是如何在 Windows 命令提示符中发生的?

【问题讨论】:

  • 这一行:E:\Users\Me\Desktop\Python>idtohex.py 的意思是“在给定路径执行程序并将其输出存储到 idtohex.py 文件中”,和往常一样。如果该命令不存在,则其输出为空,因此.py文件中存储的结果为0字节...
  • 您应该使用 IDE 而不是旧的命令提示符进行调查。
  • 你真的在命令提示符下输入了所有E:\Users\Me\Desktop\Python>idtohex.py吗?您是否不知道E:\Users\Me\Desktop\Python> 代表提示本身 - 您应该在打开终端时看到它 - 而您只应该输入idtohex.py
  • @HarryJohnston,cmd.exe 肯定是一个遗留的 shell(它可以追溯到 OS/2,它基于 MS-DOS COMMAND.COM),但你不能对 powershell 说同样的话。 exe(也是一个控制台应用程序,即conhost.exe的客户端)。对于 3.6b1(9 月 12 日),CPython 正在改进 Windows 控制台的原始 I/O 层,以使用宽字符 API 支持 Unicode(原始层在 UTF-16 和 UTF-8 之间进行转码,因为使用字节作为 UTF -8 更适合 Python)。因此控制台脚本和 python.exe REPL 将不再局限于旧代码页。好吗?

标签: python windows batch-file command-line cmd


【解决方案1】:

在运行命令之前,cmd.exe 会设置其标准句柄以供子进程继承。 > 运算符将文件描述符重定向到为输出而打开的文件,并将现有文件截断为 0 字节。它默认为文件描述符 1(标准输出或标准输出)。由于唯一的输出是文件描述符 2 上的错误消息(标准错误,stderr),因此生成的文件是空的。如果您运行了E:\Users\Me\Desktop\Python 2>idtohex.py(在这种情况下需要空间用于解析),则该文件将被错误消息覆盖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-28
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多