Hãy sử dụng grep
để tham gia vào sân chơi bóng chày. Tôi sẽ không bận tâm tìm kiếm default
vì tôi sẽ nhận được quá nhiều kết quả, nhưng tôi sẽ thử Type "Help"
, không được xuất hiện quá nhiều lần. Nếu đó là một chuỗi C, các dấu ngoặc kép sẽ được thoát. Chúng ta nên tìm kiếm các chuỗi C đầu tiên và Python sau này.
Python $ grep 'Type \\"help\\"' . -Ir
./Modules/main.c: "Type \"help\", \"copyright\", \"credits\" or \"license\" " \
It's in Modules/main.c
, in Py_Main()
. Hơn đào ban cho chúng ta dòng này:
fprintf(stderr, "Python %s on %s\n",
Py_GetVersion(), Py_GetPlatform());
Bởi vì "trên" là trong chuỗi định dạng, Py_GetPlatform()
phải linux
và Py_GetVersion()
phải cung cấp cho chuỗi chúng tôi muốn ...
Python $ grep Py_GetVersion . -Irl
...
./Python/getversion.c
...
Điều đó có vẻ đầy hứa hẹn. ..
PyOS_snprintf(version, sizeof(version), "%.80s (%.80s) %.80s",
PY_VERSION, Py_GetBuildInfo(), Py_GetCompiler());
Chúng ta phải muốn Py_GetBuildInfo()
, bởi vì nó bên trong dấu ngoặc đơn ...
Python $ grep Py_GetBuildInfo . -Irl
...
./Modules/getbuildinfo.c
...
Điều đó có vẻ hơi quá rõ ràng.
const char *
Py_GetBuildInfo(void)
{
static char buildinfo[50 + sizeof(HGVERSION) +
((sizeof(HGTAG) > sizeof(HGBRANCH)) ?
sizeof(HGTAG) : sizeof(HGBRANCH))];
const char *revision = _Py_hgversion();
const char *sep = *revision ? ":" : "";
const char *hgid = _Py_hgidentifier();
if (!(*hgid))
hgid = "default";
PyOS_snprintf(buildinfo, sizeof(buildinfo),
"%s%s%s, %.20s, %.9s", hgid, sep, revision,
DATE, TIME);
return buildinfo;
}
Vì vậy, default
là tên của chi nhánh Mercurial. Bằng cách kiểm tra các makefiles, chúng ta có thể tìm ra rằng điều này xuất phát từ macro HGTAG
. Biến makefile có tên là HGTAG
tạo biến và biến đó được chạy dưới dạng lệnh. Vì vậy,
giải pháp đơn giản
Khi xây dựng Python,
Python $ ./configure
Python $ make HGTAG='echo awesome'
Python $ ./python
Python 3.2.3 (awesome, May 1 2013, 21:33:27)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
Có thể bạn nên nhập mã cho '__DATE__' hoặc' __TIME__' để truy cập mã có liên quan. –
Bạn có thể sử dụng mã này để thay đổi những gì trình thông dịch hiển thị - python -ic 'import sys; sys.ps1 = "$"; sys.ps2 = "" ' – fixxxer